require "spec_helper"

ENV["RAILS_ENV"] ||= "test"
require File.expand_path("../config/environment", __dir__)

abort "The Rails environment is running in production mode!" if Rails.env.production?

require "rspec/rails"
require "simplecov"
require "json_matchers/rspec"

Dir[Rails.root.join("spec", "support", "**", "*.rb")].sort.each do |f|
  require f
end

JsonMatchers.schema_root = "spec/support/api/schemas"

begin
  ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
  puts e.to_s.strip
  exit 1
end

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  config.use_transactional_fixtures = true

  config.infer_spec_type_from_file_location!

  config.filter_rails_from_backtrace!

  config.include FactoryBot::Syntax::Methods
  config.include RequestSpecHelper, type: :request

  config.before :suite do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with :truncation
  end

  config.around :each do |example|
    DatabaseCleaner.cleaning do
      example.run
    end
  end
end

Shoulda::Matchers.configure do |config|
  config.integrate do |with|
    with.test_framework :rspec
    with.library :rails
  end
end

SimpleCov.start do
  # ignore test folder
  add_filter "/spec/"

  # ignore rails generated files
  add_filter "app/channels/"
  add_filter "app/mailers/application_mailer.rb"
  add_filter "config/"
  add_filter "vendor/"
  add_filter "jobs/"

  # groups
  add_group "Controllers", "app/controllers"
  add_group "Models", "app/models"
  add_group "Services", "app/services"
  add_group "Policies", "app/policies"

  coverage_dir "public/coverage"
end
