summaryrefslogtreecommitdiff
path: root/spec/models
diff options
context:
space:
mode:
authorGitLab Release Tools Bot <robert+release-tools@gitlab.com>2019-04-25 10:39:09 +0000
committerGitLab Release Tools Bot <robert+release-tools@gitlab.com>2019-04-25 10:39:09 +0000
commitfee6e478d6ffa548d9c39e2aafb452507a41124b (patch)
tree5bd919eab4d793e26297ecd46c768b82f38ed777 /spec/models
parent4282e390ea105c99fdba714a9c0976de2dbbe810 (diff)
parent208338fde6750ad327fb8ab57877869435520436 (diff)
downloadgitlab-ce-fee6e478d6ffa548d9c39e2aafb452507a41124b.tar.gz
Merge branch 'security-approval-race-condition' into 'master'
Add ApplicationRecord#safe_ensure_unique method See merge request gitlab/gitlabhq!3054
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/application_record_spec.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/spec/models/application_record_spec.rb b/spec/models/application_record_spec.rb
index fd25132ed3a..cc90a998d3f 100644
--- a/spec/models/application_record_spec.rb
+++ b/spec/models/application_record_spec.rb
@@ -11,6 +11,25 @@ describe ApplicationRecord do
end
end
+ describe '.safe_ensure_unique' do
+ let(:model) { build(:suggestion) }
+ let(:klass) { model.class }
+
+ before do
+ allow(model).to receive(:save).and_raise(ActiveRecord::RecordNotUnique)
+ end
+
+ it 'returns false when ActiveRecord::RecordNotUnique is raised' do
+ expect(model).to receive(:save).once
+ expect(klass.safe_ensure_unique { model.save }).to be_falsey
+ end
+
+ it 'retries based on retry count specified' do
+ expect(model).to receive(:save).exactly(3).times
+ expect(klass.safe_ensure_unique(retries: 2) { model.save }).to be_falsey
+ end
+ end
+
describe '.safe_find_or_create_by' do
it 'creates the user avoiding race conditions' do
expect(Suggestion).to receive(:find_or_create_by).and_raise(ActiveRecord::RecordNotUnique)