Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support_specs')
-rw-r--r--spec/support_specs/database/multiple_databases_spec.rb6
-rw-r--r--spec/support_specs/database/prevent_cross_database_modification_spec.rb163
-rw-r--r--spec/support_specs/helpers/stub_feature_flags_spec.rb2
-rw-r--r--spec/support_specs/time_travel_spec.rb21
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