From c3b489bdcb1d6cf8bcdb935c73892dc5465eacbd Mon Sep 17 00:00:00 2001 From: Andreas Brandl Date: Sun, 18 Mar 2018 17:13:09 +0100 Subject: Add spec for concurrent insert situation. --- spec/models/internal_id_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spec/models/internal_id_spec.rb b/spec/models/internal_id_spec.rb index 40d777c46cc..581fd0293cc 100644 --- a/spec/models/internal_id_spec.rb +++ b/spec/models/internal_id_spec.rb @@ -38,6 +38,19 @@ describe InternalId do expect(subject).to eq(project.issues.size + 1) end end + + context 'with concurrent inserts on table' do + it 'looks up the record if it was created concurrently' do + args = { **scope, usage: described_class.usages[usage.to_s] } + record = double + expect(described_class).to receive(:find_by).with(args).and_return(nil) # first call, record not present + expect(described_class).to receive(:find_by).with(args).and_return(record) # second call, record was created by another process + expect(described_class).to receive(:create!).and_raise(ActiveRecord::RecordNotUnique, 'record not unique') + expect(record).to receive(:increment_and_save!) + + subject + end + end end it 'generates a strictly monotone, gapless sequence' do -- cgit v1.2.1