diff options
| author | Teddy Wing | 2017-12-13 17:01:15 +0100 |
|---|---|---|
| committer | Teddy Wing | 2017-12-13 17:01:15 +0100 |
| commit | bd8a999b12963b7303500ce93449bb7932afeec3 (patch) | |
| tree | 66e2c140ad1c80f49a95f9c8957fb71810e3b7ba | |
| parent | 985d9a673a79f2b304119999dc76d418225332c7 (diff) | |
| download | chouette-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.rb | 134 | ||||
| -rw-r--r-- | spec/support/referential.rb | 2 |
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 |
