diff options
Diffstat (limited to 'spec/support_specs')
4 files changed, 25 insertions, 167 deletions
diff --git a/spec/support_specs/database/multiple_databases_spec.rb b/spec/support_specs/database/multiple_databases_spec.rb index 6ad15fd6594..10d1a8277c6 100644 --- a/spec/support_specs/database/multiple_databases_spec.rb +++ b/spec/support_specs/database/multiple_databases_spec.rb @@ -19,19 +19,19 @@ RSpec.describe 'Database::MultipleDatabases' do end end - context 'on Ci::CiDatabaseRecord' do + context 'on Ci::ApplicationRecord' do before do skip_if_multiple_databases_not_setup end it 'raises exception' do - expect { Ci::CiDatabaseRecord.establish_connection(:ci) }.to raise_error /Cannot re-establish/ + expect { Ci::ApplicationRecord.establish_connection(:ci) }.to raise_error /Cannot re-establish/ end context 'when using with_reestablished_active_record_base' do it 'does not raise exception' do with_reestablished_active_record_base do - expect { Ci::CiDatabaseRecord.establish_connection(:main) }.not_to raise_error + expect { Ci::ApplicationRecord.establish_connection(:main) }.not_to raise_error end end end diff --git a/spec/support_specs/database/prevent_cross_database_modification_spec.rb b/spec/support_specs/database/prevent_cross_database_modification_spec.rb deleted file mode 100644 index e86559bb14a..00000000000 --- a/spec/support_specs/database/prevent_cross_database_modification_spec.rb +++ /dev/null @@ -1,163 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Database::PreventCrossDatabaseModification' do - let_it_be(:pipeline, refind: true) { create(:ci_pipeline) } - let_it_be(:project, refind: true) { create(:project) } - - shared_examples 'succeessful examples' do - context 'outside transaction' do - it { expect { run_queries }.not_to raise_error } - end - - context 'within transaction' do - it do - Project.transaction do - expect { run_queries }.not_to raise_error - end - end - end - - context 'within nested transaction' do - it do - Project.transaction(requires_new: true) do - Project.transaction(requires_new: true) do - expect { run_queries }.not_to raise_error - end - end - end - end - end - - context 'when CI and other tables are read in a transaction' do - def run_queries - pipeline.reload - project.reload - end - - include_examples 'succeessful examples' - end - - context 'when only CI data is modified' do - def run_queries - pipeline.touch - project.reload - end - - include_examples 'succeessful examples' - end - - context 'when other data is modified' do - def run_queries - pipeline.reload - project.touch - end - - include_examples 'succeessful examples' - end - - describe 'with_cross_database_modification_prevented block' do - it 'raises error when CI and other data is modified' do - expect do - with_cross_database_modification_prevented do - Project.transaction do - project.touch - pipeline.touch - end - end - end.to raise_error /Cross-database data modification/ - end - end - - context 'when running tests with prevent_cross_database_modification', :prevent_cross_database_modification do - context 'when both CI and other data is modified' do - def run_queries - project.touch - pipeline.touch - end - - context 'outside transaction' do - it { expect { run_queries }.not_to raise_error } - end - - context 'when data modification happens in a transaction' do - it 'raises error' do - Project.transaction do - expect { run_queries }.to raise_error /Cross-database data modification/ - end - end - - context 'when data modification happens in nested transactions' do - it 'raises error' do - Project.transaction(requires_new: true) do - project.touch - Project.transaction(requires_new: true) do - expect { pipeline.touch }.to raise_error /Cross-database data modification/ - end - end - end - end - end - - context 'when executing a SELECT FOR UPDATE query' do - def run_queries - project.touch - pipeline.lock! - end - - context 'outside transaction' do - it { expect { run_queries }.not_to raise_error } - end - - context 'when data modification happens in a transaction' do - it 'raises error' do - Project.transaction do - expect { run_queries }.to raise_error /Cross-database data modification/ - end - end - end - end - end - - context 'when CI association is modified through project' do - def run_queries - project.variables.build(key: 'a', value: 'v') - project.save! - end - - include_examples 'succeessful examples' - end - - describe '#allow_cross_database_modification_within_transaction' do - it 'skips raising error' do - expect do - Gitlab::Database.allow_cross_database_modification_within_transaction(url: 'gitlab-issue') do - Project.transaction do - pipeline.touch - project.touch - end - end - end.not_to raise_error - end - - it 'raises error when complex factories are built referencing both databases' do - expect do - ApplicationRecord.transaction do - create(:ci_pipeline) - end - end.to raise_error /Cross-database data modification/ - end - - it 'skips raising error on factory creation' do - expect do - Gitlab::Database.allow_cross_database_modification_within_transaction(url: 'gitlab-issue') do - ApplicationRecord.transaction do - create(:ci_pipeline) - end - end - end.not_to raise_error - end - end - end -end diff --git a/spec/support_specs/helpers/stub_feature_flags_spec.rb b/spec/support_specs/helpers/stub_feature_flags_spec.rb index 8629e895fd1..9b35fe35259 100644 --- a/spec/support_specs/helpers/stub_feature_flags_spec.rb +++ b/spec/support_specs/helpers/stub_feature_flags_spec.rb @@ -97,7 +97,7 @@ RSpec.describe StubFeatureFlags do context 'type handling' do context 'raises error' do where(:feature_actors) do - ['string', 1, 1.0, OpenStruct.new] + ['string', 1, 1.0, Object.new] end with_them do diff --git a/spec/support_specs/time_travel_spec.rb b/spec/support_specs/time_travel_spec.rb new file mode 100644 index 00000000000..8fa51c0c1f0 --- /dev/null +++ b/spec/support_specs/time_travel_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'time travel' do + describe ':freeze_time' do + it 'freezes time around a spec example', :freeze_time do + expect { sleep 0.1 }.not_to change { Time.now.to_f } + end + end + + describe ':time_travel_to' do + it 'time-travels to the specified date', time_travel_to: '2020-01-01' do + expect(Date.current).to eq(Date.new(2020, 1, 1)) + end + + it 'time-travels to the specified date & time', time_travel_to: '2020-02-02 10:30:45 -0700' do + expect(Time.current).to eq(Time.new(2020, 2, 2, 17, 30, 45, '+00:00')) + end + end +end |