Skip to content

Commit 1246714

Browse files
author
Ricard Forniol
committed
Ensure collisions to work on mongodb 2.6. 3.0 and 4.0
1 parent 4a2e269 commit 1246714

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

lib/mongoid/token/collisions.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def raise_collision_retries_exceeded_error(field_name, retry_count)
2626
end
2727

2828
def duplicate_token_error?(err, document, field_name)
29-
err.message =~ /(11000|11001)/ &&
29+
[11000, 11001].include?(err.code) &&
3030
err.message =~ /dup key/ &&
3131
err.message =~ /"#{document.send(field_name)}"/ &&
3232
true

spec/mongoid/token/collisions_spec.rb

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,19 +103,36 @@
103103
document.class.send(:include, Mongoid::Token::Collisions)
104104
end
105105
context "when there is a duplicate key error" do
106-
it "should return true" do
106+
before do
107107
allow(document).to receive("token").and_return("tokenvalue123")
108-
err = double('Mongo::Error::OperationFailure')
109-
allow(err).to(receive("message")
110-
.and_return('insertDocument :: caused by :: 11000 E11000'\
111-
' duplicate key error index: mongoid_token_'\
112-
'test.documents.$token_1 dup key: '\
113-
'{ : "tokenvalue123" } (11000) (on localhost'\
114-
':27017, legacy retry, attempt 1) (on localh'\
115-
'ost:27017, legacy retry, attempt 1)'))
116-
expect(document.duplicate_token_error?(err, document, :token)).to(
117-
be(true)
118-
)
108+
allow(err).to(receive("message").and_return(message))
109+
end
110+
let(:err) { double('Mongo::Error::OperationFailure', code: 11000) }
111+
subject { document.duplicate_token_error?(err, document, :token) }
112+
113+
context "mongodb version 2.6, 3.0" do
114+
let(:message) do
115+
"insertDocument :: caused by :: 11000 "\
116+
"E11000 duplicate key error index: "\
117+
"mongoid_token_test.documents.$token_1 "\
118+
"dup key: { : \"tokenvalue123\" } (11000) "\
119+
"(on localhost:27017, legacy retry, attempt 1) "\
120+
"(on localhost:27017, legacy retry, attempt 1)"
121+
end
122+
123+
it { is_expected.to be(true) }
124+
end
125+
126+
context "mongodb version 4" do
127+
let(:message) do
128+
"E11000 duplicate key error collection: "\
129+
"mongoid_token_test.docs index: token_1 "\
130+
"dup key: { : \"tokenvalue123\" } (11000) "\
131+
"(on localhost:27017, legacy retry, attempt 1) "\
132+
"(on localhost:27017, legacy retry, attempt 1)"
133+
end
134+
135+
it { is_expected.to be(true) }
119136
end
120137
end
121138
end

spec/mongoid/token_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ class Doc
182182
let(:doc) { Doc.create(foo: "hello") }
183183
let(:dup_doc) { Doc.new }
184184
let(:exception) do
185-
/E11000 duplicate key error index: mongoid_token_test.docs\.\$foo_1/
185+
/(E11000 duplicate key error index: mongoid_token_test.docs\.\$foo_1|E11000 duplicate key error collection: mongoid_token_test\.docs index: foo_1 dup key)/
186186
end
187187

188188
it do

0 commit comments

Comments
 (0)