From 688285c3748d506cc3947a7dfca2e8e1fee16de1 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 11 Apr 2023 12:12:52 +1000 Subject: [PATCH 1/5] Remove loading of unused spec helpers We have only one feature spec left and it's loading the system_helper instead of the spec_helper. These lines were dead code. --- spec/spec_helper.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 85d53dfb9d..7edf6d8551 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -40,6 +40,4 @@ RSpec.configure do |config| config.include Devise::Test::ControllerHelpers, type: :controller config.include OpenFoodNetwork::ApiHelper, type: :controller config.include OpenFoodNetwork::ControllerHelper, type: :controller - config.include Features::DatepickerHelper, type: :feature - config.include DownloadsHelper, type: :feature end From 68d5327b12226d835ffa57e3ce03c77221fe9c0e Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 11 Apr 2023 12:56:28 +1000 Subject: [PATCH 2/5] Load all spec helpers in one place These helpers are loaded depending on the spec type. We don't need to separate them into different files. --- spec/base_spec_helper.rb | 8 ++++++++ spec/spec_helper.rb | 9 --------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/spec/base_spec_helper.rb b/spec/base_spec_helper.rb index 88942f48a4..478b95f3cd 100644 --- a/spec/base_spec_helper.rb +++ b/spec/base_spec_helper.rb @@ -124,6 +124,7 @@ RSpec.configure do |config| config.infer_spec_type_from_file_location! + # Helpers config.include FactoryBot::Syntax::Methods config.include JsonSpec::Helpers @@ -141,6 +142,13 @@ RSpec.configure do |config| config.include ActiveJob::TestHelper config.include ReportsHelper + config.include ViewComponent::TestHelpers, type: :component + + config.include ControllerRequestsHelper, type: :controller + config.include Devise::Test::ControllerHelpers, type: :controller + config.include OpenFoodNetwork::ApiHelper, type: :controller + config.include OpenFoodNetwork::ControllerHelper, type: :controller + config.include Features::DatepickerHelper, type: :system config.include DownloadsHelper, type: :system end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 7edf6d8551..548229f351 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,9 +1,7 @@ # frozen_string_literal: true require 'base_spec_helper' - require 'database_cleaner' -require 'view_component/test_helpers' RSpec.configure do |config| # DatabaseCleaner @@ -33,11 +31,4 @@ RSpec.configure do |config| # You can use `rspec -n` to run only failed specs. config.example_status_persistence_file_path = "tmp/rspec-status.txt" - - # Helpers - config.include ViewComponent::TestHelpers, type: :component - config.include ControllerRequestsHelper, type: :controller - config.include Devise::Test::ControllerHelpers, type: :controller - config.include OpenFoodNetwork::ApiHelper, type: :controller - config.include OpenFoodNetwork::ControllerHelper, type: :controller end From 111705f6f2423219aa7f747eed5dcb780c04acc9 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 11 Apr 2023 14:07:27 +1000 Subject: [PATCH 3/5] Clarify DatabaseCleaner use only for concurrency Otherwise we use transactions. --- spec/spec_helper.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 548229f351..ff7b3d6889 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,15 +5,15 @@ require 'database_cleaner' RSpec.configure do |config| # DatabaseCleaner - config.before(:suite) { - DatabaseCleaner.clean_with :deletion, except: ['spree_countries', 'spree_states'] - } - config.before(:each) { DatabaseCleaner.strategy = :transaction } - config.before(:each, concurrency: true) { + config.before(:each, concurrency: true) do + config.use_transactional_fixtures = false DatabaseCleaner.strategy = :deletion, { except: ['spree_countries', 'spree_states'] } - } - config.before(:each) { DatabaseCleaner.start } - config.after(:each) { DatabaseCleaner.clean } + DatabaseCleaner.start + end + config.after(:each, concurrency: true) do + DatabaseCleaner.clean + config.use_transactional_fixtures = true + end # Precompile Webpacker assets (once) when starting the suite. The default setup can result # in the assets getting compiled many times throughout the build, slowing it down. @@ -27,7 +27,7 @@ RSpec.configure do |config| # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. - config.use_transactional_fixtures = false + config.use_transactional_fixtures = true # You can use `rspec -n` to run only failed specs. config.example_status_persistence_file_path = "tmp/rspec-status.txt" From f13c0e1dca74d6274f2a4aea6c2e9ff3fc31313e Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 12 Apr 2023 14:23:09 +1000 Subject: [PATCH 4/5] Bring all Rspec config for database cleaning together --- spec/base_spec_helper.rb | 18 ++++++++++++++++++ spec/spec_helper.rb | 16 ---------------- spec/system/support/cuprite_setup.rb | 3 --- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/spec/base_spec_helper.rb b/spec/base_spec_helper.rb index 478b95f3cd..6696ed7639 100644 --- a/spec/base_spec_helper.rb +++ b/spec/base_spec_helper.rb @@ -57,6 +57,24 @@ RSpec.configure do |config| # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + # + # Setting this to true keeps the database clean by rolling back any changes. + config.use_transactional_fixtures = true + + # Some tests don't work within a transaction. Then we use DatabaseCleaner. + config.before(:each, concurrency: true) do + config.use_transactional_fixtures = false + DatabaseCleaner.strategy = :deletion, { except: ['spree_countries', 'spree_states'] } + DatabaseCleaner.start + end + config.after(:each, concurrency: true) do + DatabaseCleaner.clean + config.use_transactional_fixtures = true + end + # If true, the base class of anonymous controllers will be inferred # automatically. This will be the default behavior in future versions of # rspec-rails. diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ff7b3d6889..da264f58e3 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -4,17 +4,6 @@ require 'base_spec_helper' require 'database_cleaner' RSpec.configure do |config| - # DatabaseCleaner - config.before(:each, concurrency: true) do - config.use_transactional_fixtures = false - DatabaseCleaner.strategy = :deletion, { except: ['spree_countries', 'spree_states'] } - DatabaseCleaner.start - end - config.after(:each, concurrency: true) do - DatabaseCleaner.clean - config.use_transactional_fixtures = true - end - # Precompile Webpacker assets (once) when starting the suite. The default setup can result # in the assets getting compiled many times throughout the build, slowing it down. config.before :suite do @@ -24,11 +13,6 @@ RSpec.configure do |config| # Fix encoding issue in Rails 5.0; allows passing empty arrays or hashes as params. config.before(:each, type: :controller) { @request.env["CONTENT_TYPE"] = 'application/json' } - # If you're not using ActiveRecord, or you'd prefer not to run each of your - # examples within a transaction, remove the following line or assign false - # instead of true. - config.use_transactional_fixtures = true - # You can use `rspec -n` to run only failed specs. config.example_status_persistence_file_path = "tmp/rspec-status.txt" end diff --git a/spec/system/support/cuprite_setup.rb b/spec/system/support/cuprite_setup.rb index dd50fac14b..bdb7ba433e 100644 --- a/spec/system/support/cuprite_setup.rb +++ b/spec/system/support/cuprite_setup.rb @@ -33,9 +33,6 @@ RSpec.configure do |config| config.prepend_before(:each, type: :system) { driven_by :cuprite } - # System tests use transactional fixtures instead of DatabaseCleaner - config.use_transactional_fixtures = true - # Make sure url helpers in mailers use the Capybara server host. config.around(:each, type: :system) do |example| original_host = Rails.application.default_url_options[:host] From 496f5199c9c00d8a7ca5dc2fb9a83945631632d7 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 12 Apr 2023 14:24:07 +1000 Subject: [PATCH 5/5] Use DatabaseCleaner recommendation of late cleaning https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example --- spec/base_spec_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/base_spec_helper.rb b/spec/base_spec_helper.rb index 6696ed7639..cc4dc35e65 100644 --- a/spec/base_spec_helper.rb +++ b/spec/base_spec_helper.rb @@ -70,7 +70,7 @@ RSpec.configure do |config| DatabaseCleaner.strategy = :deletion, { except: ['spree_countries', 'spree_states'] } DatabaseCleaner.start end - config.after(:each, concurrency: true) do + config.append_after(:each, concurrency: true) do DatabaseCleaner.clean config.use_transactional_fixtures = true end