aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-12-13 17:01:15 +0100
committerTeddy Wing2017-12-13 17:01:15 +0100
commitbd8a999b12963b7303500ce93449bb7932afeec3 (patch)
tree66e2c140ad1c80f49a95f9c8957fb71810e3b7ba
parent985d9a673a79f2b304119999dc76d418225332c7 (diff)
downloadchouette-core-bd8a999b12963b7303500ce93449bb7932afeec3.tar.bz2
referential_lock_during_creation_spec: Make truncation strategy stick
The `truncation: true` strategy wasn't sticking. The config `before` block only ran once for this test file. Instead of attaching the filter to the `it` blocks, put it on the `context`. This correctly gets each test to run in a transaction. Remove the `truncation: false` filter I had added previously as this didn't do what I wanted it to: it prevented the `before` block from running instead of filtering out tests with `truncation: true`. Refs #5024
-rw-r--r--spec/models/referential/referential_lock_during_creation_spec.rb134
-rw-r--r--spec/support/referential.rb2
2 files changed, 69 insertions, 67 deletions
diff --git a/spec/models/referential/referential_lock_during_creation_spec.rb b/spec/models/referential/referential_lock_during_creation_spec.rb
index 9b5bef16d..ae22fa95d 100644
--- a/spec/models/referential/referential_lock_during_creation_spec.rb
+++ b/spec/models/referential/referential_lock_during_creation_spec.rb
@@ -70,87 +70,89 @@ RSpec.describe Referential, type: :model do
expect(referential_2).not_to be_persisted
end
- it "works asynchronously", truncation: true do
- begin
- referential_1 = build(
- :referential,
- workbench: workbench,
- organisation: workbench.organisation
- )
- referential_2 = referential_1.dup
- referential_2.slug = "#{referential_1.slug}_different"
- referential_3 = nil
-
- metadata_1 = build(:referential_metadata, referential: nil)
- metadata_2 = metadata_1.dup
-
- referential_1.metadatas << metadata_1
- referential_2.metadatas << metadata_2
-
- with_a_mutual_lock do
- locking_thread do
- referential_1.save
- end
- waiting_thread do
- referential_2.save
- referential_3 = create(:referential)
- end
- end
-
- expect(referential_1).to be_persisted
- expect(referential_2).not_to be_persisted
- expect(referential_3).to be_persisted
- ensure
- Apartment::Tenant.drop(referential_1.slug) if referential_1.persisted?
- Apartment::Tenant.drop(referential_2.slug) if referential_2.persisted?
-
- if referential_3.try(:persisted?)
- Apartment::Tenant.drop(referential_3.slug)
- end
- end
- end
-
- it "works asynchronously when one is updated", truncation: true do
- begin
- referential_1 = nil
- referential_2 = nil
-
- ActiveRecord::Base.transaction do
- referential_1 = create(
+ context truncation: true do
+ it "works asynchronously" do
+ begin
+ referential_1 = build(
:referential,
workbench: workbench,
organisation: workbench.organisation
)
referential_2 = referential_1.dup
- referential_2.name = 'Another'
referential_2.slug = "#{referential_1.slug}_different"
- referential_2.save!
+ referential_3 = nil
+
+ metadata_1 = build(:referential_metadata, referential: nil)
+ metadata_2 = metadata_1.dup
+
+ referential_1.metadatas << metadata_1
+ referential_2.metadatas << metadata_2
+
+ with_a_mutual_lock do
+ locking_thread do
+ referential_1.save
+ end
+ waiting_thread do
+ referential_2.save
+ referential_3 = create(:referential)
+ end
+ end
+
+ expect(referential_1).to be_persisted
+ expect(referential_2).not_to be_persisted
+ expect(referential_3).to be_persisted
+ ensure
+ Apartment::Tenant.drop(referential_1.slug) if referential_1.persisted?
+ Apartment::Tenant.drop(referential_2.slug) if referential_2.persisted?
+
+ if referential_3.try(:persisted?)
+ Apartment::Tenant.drop(referential_3.slug)
+ end
end
+ end
- metadata_2 = build(:referential_metadata, referential: nil)
- metadata_1 = metadata_2.dup
- with_a_mutual_lock do
- locking_thread do
- referential_1.metadatas_attributes = [metadata_1.attributes]
- referential_1.save
+ it "works asynchronously when one is updated" do
+ begin
+ referential_1 = nil
+ referential_2 = nil
+
+ ActiveRecord::Base.transaction do
+ referential_1 = create(
+ :referential,
+ workbench: workbench,
+ organisation: workbench.organisation
+ )
+ referential_2 = referential_1.dup
+ referential_2.name = 'Another'
+ referential_2.slug = "#{referential_1.slug}_different"
+ referential_2.save!
end
- waiting_thread do
- referential_2.metadatas_attributes = [metadata_2.attributes]
- referential_2.save
+
+ metadata_2 = build(:referential_metadata, referential: nil)
+ metadata_1 = metadata_2.dup
+ with_a_mutual_lock do
+ locking_thread do
+ referential_1.metadatas_attributes = [metadata_1.attributes]
+ referential_1.save
+ end
+ waiting_thread do
+ referential_2.metadatas_attributes = [metadata_2.attributes]
+ referential_2.save
+ end
end
- end
- expect(referential_1).to be_valid
- expect(referential_2).not_to be_valid
- ensure
- Apartment::Tenant.drop(referential_1.slug) if referential_1.persisted?
- Apartment::Tenant.drop(referential_2.slug) if referential_2.persisted?
+ expect(referential_1).to be_valid
+ expect(referential_2).not_to be_valid
+ ensure
+ Apartment::Tenant.drop(referential_1.slug) if referential_1.persisted?
+ Apartment::Tenant.drop(referential_2.slug) if referential_2.persisted?
+ end
end
end
end
- context "when two Referentials are created at the same time" do
- it "raises an error when the DB lock timeout is reached", truncation: true do
+ context "when two Referentials are created at the same time", truncation: true do
+ it "raises an error when the DB lock timeout is reached" do
begin
referential_1 = build(
:referential,
diff --git a/spec/support/referential.rb b/spec/support/referential.rb
index d00a9ba7f..3a41b2e70 100644
--- a/spec/support/referential.rb
+++ b/spec/support/referential.rb
@@ -72,7 +72,7 @@ RSpec.configure do |config|
)
end
- config.before(:each, truncation: false) do
+ config.before(:each) do
DatabaseCleaner.strategy = :transaction
# Switch into the default tenant
first_referential.switch