mongoid 7.0.2 → 7.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/mongoid/association/referenced/eager.rb +4 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +3 -1
- data/lib/mongoid/association/referenced/has_many/proxy.rb +2 -2
- data/lib/mongoid/association/relatable.rb +90 -10
- data/lib/mongoid/clients/options.rb +6 -4
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +33 -6
- data/lib/mongoid/document.rb +11 -4
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/regexp.rb +1 -0
- data/lib/mongoid/matchable.rb +3 -1
- data/lib/mongoid/matchable/eq.rb +22 -0
- data/lib/mongoid/matchable/ne.rb +1 -1
- data/lib/mongoid/persistence_context.rb +20 -5
- data/lib/mongoid/query_cache.rb +8 -4
- data/lib/mongoid/railtie.rb +17 -0
- data/lib/mongoid/railties/controller_runtime.rb +86 -0
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/threaded.rb +36 -0
- data/lib/mongoid/version.rb +1 -1
- data/spec/app/models/minim.rb +7 -0
- data/spec/app/models/store_as_dup_test3.rb +7 -0
- data/spec/app/models/store_as_dup_test4.rb +7 -0
- data/spec/config/mongoid.yml +12 -3
- data/spec/integration/associations/belongs_to_spec.rb +13 -0
- data/spec/lite_spec_helper.rb +56 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +24 -5
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +46 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +21 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +56 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +3 -3
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many_models.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +3 -3
- data/spec/mongoid/association/referenced/has_one_models.rb +48 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +51 -4
- data/spec/mongoid/clients/factory_spec.rb +24 -18
- data/spec/mongoid/clients/options_spec.rb +40 -37
- data/spec/mongoid/clients_spec.rb +68 -8
- data/spec/mongoid/config_spec.rb +3 -1
- data/spec/mongoid/contextual/mongo_spec.rb +5 -2
- data/spec/mongoid/copyable_spec.rb +40 -6
- data/spec/mongoid/copyable_spec_models.rb +17 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +42 -3
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
- data/spec/mongoid/criteria/scopable_spec.rb +81 -0
- data/spec/mongoid/criteria_spec.rb +18 -3
- data/spec/mongoid/document_spec.rb +81 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
- data/spec/mongoid/extensions/regexp_spec.rb +23 -0
- data/spec/mongoid/fields_spec.rb +1 -1
- data/spec/mongoid/findable_spec.rb +1 -1
- data/spec/mongoid/matchable/eq_spec.rb +48 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
- data/spec/mongoid/persistence_context_spec.rb +1 -1
- data/spec/mongoid/query_cache_spec.rb +59 -6
- data/spec/mongoid/scopable_spec.rb +13 -0
- data/spec/mongoid/threaded_spec.rb +68 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +110 -0
- data/spec/spec_helper.rb +35 -25
- data/spec/support/constraints.rb +101 -0
- data/spec/support/macros.rb +20 -0
- data/spec/support/spec_config.rb +39 -0
- metadata +471 -460
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -2
- metadata.gz.sig +0 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe Mongoid::Matchable::Eq do
|
6
|
+
|
7
|
+
let(:matcher) do
|
8
|
+
described_class.new("first")
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#_matches?" do
|
12
|
+
|
13
|
+
context "when the values are equal" do
|
14
|
+
|
15
|
+
it "returns true" do
|
16
|
+
expect(matcher._matches?("$eq" => "first")).to be true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "when the values are not equal" do
|
21
|
+
|
22
|
+
it "returns false" do
|
23
|
+
expect(matcher._matches?("$eq" => "second")).to be false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when the value is an array" do
|
28
|
+
|
29
|
+
let(:array_matcher) do
|
30
|
+
described_class.new([ "first" ])
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when the value is in the array" do
|
34
|
+
|
35
|
+
it "returns true" do
|
36
|
+
expect(array_matcher._matches?("$eq" => "first")).to be true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when the value is not in the array" do
|
41
|
+
|
42
|
+
it "returns false" do
|
43
|
+
expect(array_matcher._matches?("$eq" => "second")).to be false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -66,15 +66,15 @@ describe Mongoid::Persistable::Incrementable do
|
|
66
66
|
context "when providing big decimal values" do
|
67
67
|
|
68
68
|
let(:five) do
|
69
|
-
BigDecimal
|
69
|
+
BigDecimal("5.0")
|
70
70
|
end
|
71
71
|
|
72
72
|
let(:neg_ten) do
|
73
|
-
BigDecimal
|
73
|
+
BigDecimal("-10.0")
|
74
74
|
end
|
75
75
|
|
76
76
|
let(:thirty) do
|
77
|
-
BigDecimal
|
77
|
+
BigDecimal("30.0")
|
78
78
|
end
|
79
79
|
|
80
80
|
let!(:inc) do
|
@@ -151,15 +151,15 @@ describe Mongoid::Persistable::Incrementable do
|
|
151
151
|
context "when providing big decimal values" do
|
152
152
|
|
153
153
|
let(:five) do
|
154
|
-
BigDecimal
|
154
|
+
BigDecimal("5.0")
|
155
155
|
end
|
156
156
|
|
157
157
|
let(:neg_ten) do
|
158
|
-
BigDecimal
|
158
|
+
BigDecimal("-10.0")
|
159
159
|
end
|
160
160
|
|
161
161
|
let(:thirty) do
|
162
|
-
BigDecimal
|
162
|
+
BigDecimal("30.0")
|
163
163
|
end
|
164
164
|
|
165
165
|
let!(:inc) do
|
@@ -536,7 +536,7 @@ describe Mongoid::PersistenceContext do
|
|
536
536
|
end
|
537
537
|
|
538
538
|
before do
|
539
|
-
Mongoid.clients[:alternative] = { database: :mongoid_test, hosts:
|
539
|
+
Mongoid.clients[:alternative] = { database: :mongoid_test, hosts: SpecConfig.instance.addresses }
|
540
540
|
end
|
541
541
|
|
542
542
|
after do
|
@@ -123,6 +123,36 @@ describe Mongoid::QueryCache do
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
+
context 'querying all documents after a single document' do
|
127
|
+
before do
|
128
|
+
3.times do
|
129
|
+
Person.create
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'returns all documents' do
|
134
|
+
expect(Person.all.to_a.count).to eq(3)
|
135
|
+
Person.first
|
136
|
+
expect(Person.all.to_a.count).to eq(3)
|
137
|
+
end
|
138
|
+
|
139
|
+
context 'with conditions specified' do
|
140
|
+
it 'returns all documents' do
|
141
|
+
expect(Person.gt(age: 0).to_a.count).to eq(3)
|
142
|
+
Person.gt(age: 0).first
|
143
|
+
expect(Person.gt(age: 0).to_a.count).to eq(3)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
context 'with order specified' do
|
148
|
+
it 'returns all documents' do
|
149
|
+
expect(Person.order_by(name: 1).to_a.count).to eq(3)
|
150
|
+
Person.order_by(name: 1).first
|
151
|
+
expect(Person.order_by(name: 1).to_a.count).to eq(3)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
126
156
|
context "when querying in the same collection" do
|
127
157
|
|
128
158
|
before do
|
@@ -411,18 +441,18 @@ describe Mongoid::QueryCache do
|
|
411
441
|
end
|
412
442
|
end
|
413
443
|
|
414
|
-
context "when querying
|
444
|
+
context "when querying collection smaller than the batch size" do
|
415
445
|
|
416
446
|
before do
|
417
|
-
|
447
|
+
99.times { Band.create! }
|
418
448
|
end
|
419
449
|
|
420
450
|
it "returns the right number of records" do
|
421
|
-
expect(Band.all.to_a.length).to eq(
|
451
|
+
expect(Band.all.to_a.length).to eq(99)
|
422
452
|
end
|
423
453
|
|
424
454
|
it "#pluck returns the same count of objects" do
|
425
|
-
expect(Band.pluck(:name).length).to eq(
|
455
|
+
expect(Band.pluck(:name).length).to eq(99)
|
426
456
|
end
|
427
457
|
|
428
458
|
context "when loading all the documents" do
|
@@ -433,12 +463,12 @@ describe Mongoid::QueryCache do
|
|
433
463
|
|
434
464
|
it "caches the complete result of the query" do
|
435
465
|
expect_no_queries do
|
436
|
-
expect(Band.all.to_a.length).to eq(
|
466
|
+
expect(Band.all.to_a.length).to eq(99)
|
437
467
|
end
|
438
468
|
end
|
439
469
|
|
440
470
|
it "returns the same count of objects when using #pluck" do
|
441
|
-
expect(Band.pluck(:name).length).to eq(
|
471
|
+
expect(Band.pluck(:name).length).to eq(99)
|
442
472
|
end
|
443
473
|
end
|
444
474
|
end
|
@@ -450,6 +480,29 @@ describe Mongoid::QueryCache do
|
|
450
480
|
Band.collection.indexes.create_one(name: 1)
|
451
481
|
end
|
452
482
|
end
|
483
|
+
|
484
|
+
context 'when the initial query does not exhaust the results' do
|
485
|
+
before do
|
486
|
+
Mongoid::QueryCache.enabled = true
|
487
|
+
10.times { Band.create! }
|
488
|
+
|
489
|
+
Band.batch_size(4).all.any?
|
490
|
+
end
|
491
|
+
|
492
|
+
it 'does not cache the result' do
|
493
|
+
expect(Band.all.map(&:id).size).to eq(10)
|
494
|
+
end
|
495
|
+
|
496
|
+
context 'when a batch size smaller than the result set is specified' do
|
497
|
+
let(:batch_size) do
|
498
|
+
4
|
499
|
+
end
|
500
|
+
|
501
|
+
it 'does not cache the result' do
|
502
|
+
expect(Band.batch_size(batch_size).all.map(&:id).size).to eq(10)
|
503
|
+
end
|
504
|
+
end
|
505
|
+
end
|
453
506
|
end
|
454
507
|
|
455
508
|
describe Mongoid::QueryCache::Middleware do
|
@@ -1130,6 +1130,19 @@ describe Mongoid::Scopable do
|
|
1130
1130
|
it "sets the threading options" do
|
1131
1131
|
Band.without_default_scope do
|
1132
1132
|
expect(Mongoid::Threaded).to be_executing(:without_default_scope)
|
1133
|
+
expect(Mongoid::Threaded.without_default_scope?(Band)).to be(true)
|
1134
|
+
end
|
1135
|
+
end
|
1136
|
+
|
1137
|
+
it "suppresses default scope on the given model within the given block" do
|
1138
|
+
Appointment.without_default_scope do
|
1139
|
+
expect(Appointment.all.selector).to be_empty
|
1140
|
+
end
|
1141
|
+
end
|
1142
|
+
|
1143
|
+
it "does not affect other models' default scopes within the given block" do
|
1144
|
+
Appointment.without_default_scope do
|
1145
|
+
expect(Audio.all.selector).not_to be_empty
|
1133
1146
|
end
|
1134
1147
|
end
|
1135
1148
|
end
|
@@ -233,4 +233,72 @@ describe Mongoid::Threaded do
|
|
233
233
|
end
|
234
234
|
end
|
235
235
|
end
|
236
|
+
|
237
|
+
describe "#begin_without_default_scope" do
|
238
|
+
|
239
|
+
let(:klass) do
|
240
|
+
Appointment
|
241
|
+
end
|
242
|
+
|
243
|
+
after do
|
244
|
+
described_class.exit_without_default_scope(klass)
|
245
|
+
end
|
246
|
+
|
247
|
+
it "adds the given class to the without_default_scope stack" do
|
248
|
+
described_class.begin_without_default_scope(klass)
|
249
|
+
|
250
|
+
expect(described_class.stack(:without_default_scope)).to include(klass)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
describe "#exit_without_default_scope" do
|
255
|
+
|
256
|
+
let(:klass) do
|
257
|
+
Appointment
|
258
|
+
end
|
259
|
+
|
260
|
+
before do
|
261
|
+
described_class.begin_without_default_scope(klass)
|
262
|
+
end
|
263
|
+
|
264
|
+
it "removes the given class from the without_default_scope stack" do
|
265
|
+
described_class.exit_without_default_scope(klass)
|
266
|
+
|
267
|
+
expect(described_class.stack(:without_default_scope)).not_to include(klass)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
describe "#without_default_scope?" do
|
272
|
+
|
273
|
+
let(:klass) do
|
274
|
+
Appointment
|
275
|
+
end
|
276
|
+
|
277
|
+
context "when klass has begun without_default_scope" do
|
278
|
+
|
279
|
+
before do
|
280
|
+
described_class.begin_without_default_scope(klass)
|
281
|
+
end
|
282
|
+
|
283
|
+
after do
|
284
|
+
described_class.exit_without_default_scope(klass)
|
285
|
+
end
|
286
|
+
|
287
|
+
it "returns true" do
|
288
|
+
expect(described_class.without_default_scope?(klass)).to be(true)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
context "when klass has exited without_default_scope" do
|
293
|
+
|
294
|
+
before do
|
295
|
+
described_class.begin_without_default_scope(klass)
|
296
|
+
described_class.exit_without_default_scope(klass)
|
297
|
+
end
|
298
|
+
|
299
|
+
it "returns false" do
|
300
|
+
expect(described_class.without_default_scope?(klass)).to be(false)
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
236
304
|
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "mongoid/railties/controller_runtime"
|
3
|
+
|
4
|
+
describe "Mongoid::Railties::ControllerRuntime" do
|
5
|
+
controller_runtime = Mongoid::Railties::ControllerRuntime
|
6
|
+
collector = controller_runtime::Collector
|
7
|
+
|
8
|
+
def set_metric value
|
9
|
+
Thread.current["Mongoid.controller_runtime"] = value
|
10
|
+
end
|
11
|
+
|
12
|
+
def clear_metric!
|
13
|
+
set_metric 0
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "Collector" do
|
17
|
+
|
18
|
+
it "stores the metric in thread-safe manner" do
|
19
|
+
clear_metric!
|
20
|
+
expect(collector.runtime).to eq(0)
|
21
|
+
set_metric 42
|
22
|
+
expect(collector.runtime).to eq(42)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "sets metric on both succeeded and failed" do
|
26
|
+
instance = collector.new
|
27
|
+
event_payload = OpenStruct.new duration: 42
|
28
|
+
|
29
|
+
clear_metric!
|
30
|
+
instance.succeeded event_payload
|
31
|
+
expect(collector.runtime).to eq(42)
|
32
|
+
|
33
|
+
clear_metric!
|
34
|
+
instance.failed event_payload
|
35
|
+
expect(collector.runtime).to eq(42)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "resets the metric and returns the value" do
|
39
|
+
clear_metric!
|
40
|
+
expect(collector.reset_runtime).to eq(0)
|
41
|
+
set_metric 42
|
42
|
+
expect(collector.reset_runtime).to eq(42)
|
43
|
+
expect(collector.runtime).to eq(0)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
reference_controller_class = Class.new do
|
49
|
+
def process_action *_
|
50
|
+
@process_action = true
|
51
|
+
end
|
52
|
+
|
53
|
+
def cleanup_view_runtime *_
|
54
|
+
@cleanup_view_runtime.call
|
55
|
+
end
|
56
|
+
|
57
|
+
def append_info_to_payload *_
|
58
|
+
@append_info_to_payload = true
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.log_process_action *_
|
62
|
+
@log_process_action.call
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
controller_class = Class.new reference_controller_class do
|
67
|
+
include controller_runtime::ControllerExtension
|
68
|
+
end
|
69
|
+
|
70
|
+
let(:controller){ controller_class.new }
|
71
|
+
|
72
|
+
it "resets the metric before each action" do
|
73
|
+
set_metric 42
|
74
|
+
controller.send(:process_action, 'foo')
|
75
|
+
expect(collector.runtime).to be(0)
|
76
|
+
expect(controller.instance_variable_get "@process_action").to be(true)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "strips the metric of other sources of the runtime" do
|
80
|
+
set_metric 1
|
81
|
+
controller.instance_variable_set "@cleanup_view_runtime", ->{
|
82
|
+
controller.instance_variable_set "@cleanup_view_runtime", true
|
83
|
+
set_metric 13
|
84
|
+
42
|
85
|
+
}
|
86
|
+
returned = controller.send :cleanup_view_runtime
|
87
|
+
expect(controller.instance_variable_get "@cleanup_view_runtime").to be(true)
|
88
|
+
expect(controller.mongoid_runtime).to eq(14)
|
89
|
+
expect(returned).to be(29)
|
90
|
+
end
|
91
|
+
|
92
|
+
it "appends the metric to payload" do
|
93
|
+
payload = {}
|
94
|
+
set_metric 42
|
95
|
+
controller.send :append_info_to_payload, payload
|
96
|
+
expect(controller.instance_variable_get "@append_info_to_payload").to be(true)
|
97
|
+
expect(payload[:mongoid_runtime]).to eq(42)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "adds metric to log message" do
|
101
|
+
controller_class.instance_variable_set "@log_process_action", ->{
|
102
|
+
controller_class.instance_variable_set "@log_process_action", true
|
103
|
+
[]
|
104
|
+
}
|
105
|
+
messages = controller_class.log_process_action mongoid_runtime: 42.101
|
106
|
+
expect(controller_class.instance_variable_get "@log_process_action").to be(true)
|
107
|
+
expect(messages).to eq(["MongoDB: 42.1ms"])
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,24 +1,20 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'lite_spec_helper'
|
3
4
|
|
4
5
|
MODELS = File.join(File.dirname(__FILE__), "app/models")
|
5
6
|
$LOAD_PATH.unshift(MODELS)
|
6
7
|
|
7
8
|
require "action_controller"
|
8
|
-
require
|
9
|
-
require "rspec"
|
10
|
-
|
11
|
-
# These environment variables can be set if wanting to test against a database
|
12
|
-
# that is not on the local machine.
|
13
|
-
ENV["MONGOID_SPEC_HOST"] ||= "127.0.0.1"
|
14
|
-
ENV["MONGOID_SPEC_PORT"] ||= "27017"
|
15
|
-
|
16
|
-
# These are used when creating any connection in the test suite.
|
17
|
-
HOST = ENV["MONGOID_SPEC_HOST"]
|
18
|
-
PORT = ENV["MONGOID_SPEC_PORT"].to_i
|
9
|
+
require 'rspec/retry'
|
19
10
|
|
20
|
-
|
21
|
-
|
11
|
+
if SpecConfig.instance.client_debug?
|
12
|
+
Mongoid.logger.level = Logger::DEBUG
|
13
|
+
Mongo::Logger.logger.level = Logger::DEBUG
|
14
|
+
else
|
15
|
+
Mongoid.logger.level = Logger::INFO
|
16
|
+
Mongo::Logger.logger.level = Logger::INFO
|
17
|
+
end
|
22
18
|
|
23
19
|
# When testing locally we use the database named mongoid_test. However when
|
24
20
|
# tests are running in parallel on Travis we need to use different database
|
@@ -34,11 +30,13 @@ end
|
|
34
30
|
|
35
31
|
require 'support/authorization'
|
36
32
|
require 'support/expectations'
|
33
|
+
require 'support/macros'
|
34
|
+
require 'support/constraints'
|
37
35
|
|
38
36
|
# Give MongoDB time to start up on the travis ci environment.
|
39
37
|
if (ENV['CI'] == 'travis' || ENV['CI'] == 'evergreen')
|
40
38
|
starting = true
|
41
|
-
client = Mongo::Client.new(
|
39
|
+
client = Mongo::Client.new(SpecConfig.instance.addresses)
|
42
40
|
while starting
|
43
41
|
begin
|
44
42
|
client.command(Mongo::Server::Monitor::Connection::ISMASTER)
|
@@ -54,10 +52,10 @@ CONFIG = {
|
|
54
52
|
clients: {
|
55
53
|
default: {
|
56
54
|
database: database_id,
|
57
|
-
hosts:
|
55
|
+
hosts: SpecConfig.instance.addresses,
|
58
56
|
options: {
|
59
|
-
server_selection_timeout:
|
60
|
-
wait_queue_timeout:
|
57
|
+
server_selection_timeout: 3.42,
|
58
|
+
wait_queue_timeout: 1,
|
61
59
|
max_pool_size: 5,
|
62
60
|
heartbeat_frequency: 180,
|
63
61
|
user: MONGOID_ROOT_USER.name,
|
@@ -67,7 +65,12 @@ CONFIG = {
|
|
67
65
|
}
|
68
66
|
},
|
69
67
|
options: {
|
70
|
-
belongs_to_required_by_default: false
|
68
|
+
belongs_to_required_by_default: false,
|
69
|
+
log_level: if SpecConfig.instance.client_debug?
|
70
|
+
:debug
|
71
|
+
else
|
72
|
+
:info
|
73
|
+
end,
|
71
74
|
}
|
72
75
|
}
|
73
76
|
|
@@ -89,6 +92,12 @@ def array_filters_supported?
|
|
89
92
|
end
|
90
93
|
alias :sessions_supported? :array_filters_supported?
|
91
94
|
|
95
|
+
def testing_geo_near?
|
96
|
+
$geo_near_enabled ||= (Mongoid::Clients.default
|
97
|
+
.command(serverStatus: 1)
|
98
|
+
.first['version'] < '4.1')
|
99
|
+
end
|
100
|
+
|
92
101
|
def transactions_supported?
|
93
102
|
Mongoid::Clients.default.cluster.next_primary.features.transactions_enabled?
|
94
103
|
end
|
@@ -138,9 +147,11 @@ I18n.config.enforce_available_locales = false
|
|
138
147
|
RSpec.configure do |config|
|
139
148
|
config.raise_errors_for_deprecations!
|
140
149
|
config.include(Mongoid::Expectations)
|
150
|
+
config.extend(Constraints)
|
151
|
+
config.extend(Mongoid::Macros)
|
141
152
|
|
142
153
|
config.before(:suite) do
|
143
|
-
client = Mongo::Client.new(
|
154
|
+
client = Mongo::Client.new(SpecConfig.instance.addresses, server_selection_timeout: 3.03)
|
144
155
|
begin
|
145
156
|
# Create the root user administrator as the first user to be added to the
|
146
157
|
# database. This user will need to be authenticated in order to add any
|
@@ -153,14 +164,13 @@ RSpec.configure do |config|
|
|
153
164
|
|
154
165
|
# Drop all collections and clear the identity map before each spec.
|
155
166
|
config.before(:each) do
|
167
|
+
unless Mongoid.default_client.cluster.connected?
|
168
|
+
Mongoid.default_client.reconnect
|
169
|
+
end
|
156
170
|
Mongoid.default_client.collections.each do |coll|
|
157
171
|
coll.delete_many
|
158
172
|
end
|
159
173
|
end
|
160
|
-
|
161
|
-
config.after(:suite) do
|
162
|
-
Mongoid.purge!
|
163
|
-
end
|
164
174
|
end
|
165
175
|
|
166
176
|
# A subscriber to be used with the Ruby driver for testing.
|