| ... | ... | @@ -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)
|
| ... | ... | |
| ... | ... | |