aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--spec/models/referential_spec.rb49
1 files changed, 48 insertions, 1 deletions
diff --git a/spec/models/referential_spec.rb b/spec/models/referential_spec.rb
index 867ee4658..e65f8f457 100644
--- a/spec/models/referential_spec.rb
+++ b/spec/models/referential_spec.rb
@@ -128,7 +128,6 @@ describe Referential, :type => :model do
end
context "when two identical Referentials are created, only one is saved" do
- # TODO: Rename js: true to no transaction something
it "works synchronously" do
begin
workbench = create(:workbench)
@@ -160,5 +159,53 @@ describe Referential, :type => :model do
Apartment::Tenant.drop(referential_2.slug) if referential_2.persisted?
end
end
+
+ # TODO: Rename js: true to no transaction something
+ it "works asynchronously", js: true do
+ begin
+ workbench = create(:workbench)
+ referential_1 = build(
+ :referential,
+ workbench: workbench,
+ organisation: workbench.organisation
+ )
+ referential_2 = referential_1.dup
+ referential_2.slug = "#{referential_1.slug}_different"
+
+ metadata_1 = build(
+ :referential_metadata,
+ referential: referential_1
+ )
+ metadata_2 = metadata_1.dup
+ metadata_2.referential = referential_2
+
+ referential_1.metadatas << metadata_1
+ referential_2.metadatas << metadata_2
+
+ thread_1 = Thread.new do
+ ActiveRecord::Base.transaction do
+ referential_1.save
+ sleep 10
+ end
+ end
+
+ thread_2 = Thread.new do
+ sleep 5
+ ActiveRecord::Base.transaction do
+ referential_2.save
+ end
+ end
+
+ thread_1.join
+ thread_2.join
+
+ expect(referential_1).to be_persisted
+ expect(referential_2).not_to be_persisted
+
+ 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