diff options
author | Rémy Coutable <remy@rymai.me> | 2019-02-26 17:55:34 +0100 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2019-03-07 08:13:37 +0100 |
commit | 68b7f99fa4ec7fe8ab0ef08508899ce4dff9ef13 (patch) | |
tree | 8ac3c70ab7dca63927579317243520ae8bd73a52 /spec/support | |
parent | 12e2c3aa481be41fc08f14d85e49c517e2f3beec (diff) | |
download | gitlab-ce-68b7f99fa4ec7fe8ab0ef08508899ce4dff9ef13.tar.gz |
Reduce differences in spec/support/db_cleaner.rb
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'spec/support')
-rw-r--r-- | spec/support/database_cleaner.rb | 56 | ||||
-rw-r--r-- | spec/support/db_cleaner.rb | 50 |
2 files changed, 61 insertions, 45 deletions
diff --git a/spec/support/database_cleaner.rb b/spec/support/database_cleaner.rb new file mode 100644 index 00000000000..edd7de94203 --- /dev/null +++ b/spec/support/database_cleaner.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'database_cleaner/active_record/deletion' +require_relative 'db_cleaner' + +module FakeInformationSchema + # Work around a bug in DatabaseCleaner when using the deletion strategy: + # https://github.com/DatabaseCleaner/database_cleaner/issues/347 + # + # On MySQL, if the information schema is said to exist, we use an inaccurate + # row count leading to some tables not being cleaned when they should + def information_schema_exists?(_connection) + false + end +end + +DatabaseCleaner::ActiveRecord::Deletion.prepend(FakeInformationSchema) + +RSpec.configure do |config| + include DbCleaner + + # Ensure all sequences are reset at the start of the suite run + config.before(:suite) do + setup_database_cleaner + DatabaseCleaner.clean_with(:truncation) + end + + config.append_after(:context) do + DatabaseCleaner.clean_with(:deletion, cache_tables: false) + end + + config.before do + setup_database_cleaner + DatabaseCleaner.strategy = :transaction + end + + config.before(:each, :js) do + DatabaseCleaner.strategy = :deletion, { except: deletion_except_tables, cache_tables: false } + end + + config.before(:each, :delete) do + DatabaseCleaner.strategy = :deletion, { except: deletion_except_tables, cache_tables: false } + end + + config.before(:each, :migration) do + DatabaseCleaner.strategy = :deletion, { cache_tables: false } + end + + config.before do + DatabaseCleaner.start + end + + config.append_after do + DatabaseCleaner.clean + end +end diff --git a/spec/support/db_cleaner.rb b/spec/support/db_cleaner.rb index 34b9efaaecd..c69fa322073 100644 --- a/spec/support/db_cleaner.rb +++ b/spec/support/db_cleaner.rb @@ -1,49 +1,9 @@ -require 'database_cleaner/active_record/deletion' - -module FakeInformationSchema - # Work around a bug in DatabaseCleaner when using the deletion strategy: - # https://github.com/DatabaseCleaner/database_cleaner/issues/347 - # - # On MySQL, if the information schema is said to exist, we use an inaccurate - # row count leading to some tables not being cleaned when they should - def information_schema_exists?(_connection) - false - end -end - -DatabaseCleaner::ActiveRecord::Deletion.prepend(FakeInformationSchema) - -RSpec.configure do |config| - # Ensure all sequences are reset at the start of the suite run - config.before(:suite) do - DatabaseCleaner.clean_with(:truncation) - end - - config.append_after(:context) do - DatabaseCleaner.clean_with(:deletion, cache_tables: false) - end - - config.before do - DatabaseCleaner.strategy = :transaction - end - - config.before(:each, :js) do - DatabaseCleaner.strategy = :deletion, { cache_tables: false } - end - - config.before(:each, :delete) do - DatabaseCleaner.strategy = :deletion, { cache_tables: false } - end - - config.before(:each, :migration) do - DatabaseCleaner.strategy = :deletion, { cache_tables: false } - end - - config.before do - DatabaseCleaner.start +module DbCleaner + def deletion_except_tables + [] end - config.append_after do - DatabaseCleaner.clean + def setup_database_cleaner + DatabaseCleaner[:active_record, { connection: ActiveRecord::Base }] end end |