# frozen_string_literal: true

# This file was generated by the `rspec --init` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# Require this file using `require "spec_helper"` to ensure that it is only
# loaded once.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
#
ENV["RACK_ENV"] = "test"

require "bundler"
require "dotenv"
Bundler.require(:default, :test)
Dotenv.load(".env.test")

# Get only App Config first, to avoid pulling in libraries until
# spec_support has a chance to run, which is important for at least
# simplecov and code coverage.
require_relative "../config/config"

# pull in test initializers
Pliny::Utils.require_glob("#{Config.root}/spec/spec_support/**/*.rb")

require_relative "../lib/initializer"

RSpec.configure do |config|
  config.before :suite do
    DatabaseCleaner.clean_with(:truncation)
    DatabaseCleaner.strategy = :transaction
  end

  config.before :all do
    load("db/seeds.rb") if File.exist?("db/seeds.rb")
  end

  config.before :each do
    DatabaseCleaner.start
  end

  config.after :each do
    DatabaseCleaner.clean
  end

  config.disable_monkey_patching!
  config.expect_with :minitest
  config.run_all_when_everything_filtered = true
  config.filter_run :focus

  # Run specs in random order to surface order dependencies. If you find an
  # order dependency and want to debug it, you can fix the order by providing
  # the seed, which is printed after each run.
  #     --seed 1234
  config.order = "random"

  # the rack app to be tested with rack-test:
  def app
    @rack_app || raise("Missing @rack_app")
  end
end
