mongoid 7.6.2 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +2 -0
- data/README.md +3 -3
- data/Rakefile +21 -85
- data/lib/config/locales/en.yml +46 -56
- data/lib/mongoid/association/accessors.rb +32 -3
- data/lib/mongoid/association/bindable.rb +48 -0
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/depending.rb +4 -8
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +28 -5
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
- data/lib/mongoid/association/macros.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -0
- data/lib/mongoid/association/nested/many.rb +5 -39
- data/lib/mongoid/association/nested/nested_buildable.rb +0 -14
- data/lib/mongoid/association/proxy.rb +12 -0
- data/lib/mongoid/association/referenced/auto_save.rb +3 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
- data/lib/mongoid/association/referenced/has_many/proxy.rb +11 -107
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
- data/lib/mongoid/association/referenced/syncable.rb +2 -2
- data/lib/mongoid/association/relatable.rb +38 -4
- data/lib/mongoid/attributes/processing.rb +9 -2
- data/lib/mongoid/attributes.rb +30 -27
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +37 -2
- data/lib/mongoid/clients/factory.rb +0 -4
- data/lib/mongoid/clients/options.rb +4 -0
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/config.rb +15 -73
- data/lib/mongoid/contextual/aggregable/memory.rb +22 -20
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +63 -47
- data/lib/mongoid/contextual/mongo.rb +173 -287
- data/lib/mongoid/contextual/none.rb +33 -15
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +0 -12
- data/lib/mongoid/criteria/queryable/optional.rb +3 -9
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -133
- data/lib/mongoid/criteria/queryable/selector.rb +90 -5
- data/lib/mongoid/criteria/queryable/smash.rb +39 -6
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +11 -6
- data/lib/mongoid/criteria.rb +1 -28
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +88 -33
- data/lib/mongoid/equality.rb +4 -4
- data/lib/mongoid/errors/document_not_found.rb +6 -2
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +5 -1
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors.rb +2 -3
- data/lib/mongoid/extensions/array.rb +8 -6
- data/lib/mongoid/extensions/big_decimal.rb +29 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/float.rb +4 -5
- data/lib/mongoid/extensions/hash.rb +13 -32
- data/lib/mongoid/extensions/integer.rb +4 -5
- data/lib/mongoid/extensions/object.rb +2 -0
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +2 -13
- data/lib/mongoid/extensions/symbol.rb +3 -14
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +42 -7
- data/lib/mongoid/fields/foreign_key.rb +7 -0
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +49 -7
- data/lib/mongoid/findable.rb +21 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +4 -1
- data/lib/mongoid/interceptable.rb +69 -9
- data/lib/mongoid/matchable.rb +1 -6
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +5 -3
- data/lib/mongoid/matcher/regex.rb +9 -8
- data/lib/mongoid/matcher.rb +0 -1
- data/lib/mongoid/persistable/creatable.rb +14 -5
- data/lib/mongoid/persistable/updatable.rb +12 -5
- data/lib/mongoid/persistence_context.rb +8 -42
- data/lib/mongoid/query_cache.rb +6 -258
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +9 -11
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/shardable.rb +11 -35
- data/lib/mongoid/stateful.rb +27 -1
- data/lib/mongoid/threaded.rb +0 -3
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +1 -0
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/version.rb +1 -5
- data/lib/mongoid/warnings.rb +3 -5
- data/lib/mongoid.rb +1 -0
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -20
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +226 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -15
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/regex.yml +0 -21
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +198 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +36 -51
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +60 -156
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +73 -198
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +480 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +22 -60
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +52 -15
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +371 -231
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +467 -156
- data/spec/mongoid/contextual/mongo_spec.rb +566 -426
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- data/spec/mongoid/copyable_spec.rb +451 -2
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -2
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -200
- data/spec/mongoid/criteria/queryable/selector_spec.rb +16 -77
- data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
- data/spec/mongoid/criteria_spec.rb +469 -1203
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +48 -76
- data/spec/mongoid/extensions/hash_spec.rb +30 -236
- data/spec/mongoid/extensions/integer_spec.rb +45 -66
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +64 -29
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +16 -19
- data/spec/mongoid/interceptable_spec.rb +584 -5
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +24 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +1 -156
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +36 -34
- data/spec/mongoid/serializable_spec.rb +14 -7
- data/spec/mongoid/shardable_models.rb +0 -14
- data/spec/mongoid/shardable_spec.rb +61 -153
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +1 -7
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/cluster_config.rb +40 -5
- data/spec/shared/lib/mrss/constraints.rb +46 -7
- data/spec/shared/lib/mrss/docker_runner.rb +21 -17
- data/spec/shared/lib/mrss/eg_config_utils.rb +31 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
- data/spec/shared/lib/mrss/lite_constraints.rb +2 -10
- data/spec/shared/lib/mrss/server_version_registry.rb +29 -18
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
- data/spec/shared/lib/mrss/utils.rb +6 -28
- data/spec/shared/share/Dockerfile.erb +114 -38
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +83 -64
- data/spec/shared/shlib/set_env.sh +81 -16
- data/spec/support/constraints.rb +24 -0
- data/spec/support/expectations.rb +17 -20
- data/spec/support/macros.rb +30 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +1 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +695 -650
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/in_memory_regexp_timeout.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/lib/mongoid/field_readable.rb +0 -70
- data/lib/mongoid/matcher/regexp_budget.rb +0 -389
- data/spec/integration/matcher_regexp_timeout_spec.rb +0 -215
- data/spec/integration/query_operator_guard_spec.rb +0 -89
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/mongoid/matcher/regexp_budget_spec.rb +0 -570
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -287
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
|
@@ -120,7 +120,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
120
120
|
it "adds the uniqueness error to the aliased field name" do
|
|
121
121
|
dictionary.valid?
|
|
122
122
|
expect(dictionary.errors).to have_key(:language)
|
|
123
|
-
expect(dictionary.errors[:language]).to eq([ "
|
|
123
|
+
expect(dictionary.errors[:language]).to eq([ "has already been taken" ])
|
|
124
124
|
end
|
|
125
125
|
end
|
|
126
126
|
|
|
@@ -137,7 +137,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
137
137
|
it "adds the uniqueness error to the underlying field name" do
|
|
138
138
|
dictionary.valid?
|
|
139
139
|
expect(dictionary.errors).to have_key(:l)
|
|
140
|
-
expect(dictionary.errors[:l]).to eq([ "
|
|
140
|
+
expect(dictionary.errors[:l]).to eq([ "has already been taken" ])
|
|
141
141
|
end
|
|
142
142
|
end
|
|
143
143
|
end
|
|
@@ -239,7 +239,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
239
239
|
|
|
240
240
|
it "adds the uniqueness error" do
|
|
241
241
|
dictionary.valid?
|
|
242
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
242
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
243
243
|
end
|
|
244
244
|
end
|
|
245
245
|
|
|
@@ -260,7 +260,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
260
260
|
|
|
261
261
|
it "adds the uniqueness error" do
|
|
262
262
|
dictionary.valid?
|
|
263
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
263
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
264
264
|
end
|
|
265
265
|
end
|
|
266
266
|
end
|
|
@@ -330,7 +330,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
330
330
|
|
|
331
331
|
it "adds the uniqueness error" do
|
|
332
332
|
dictionary.valid?
|
|
333
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
333
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
334
334
|
end
|
|
335
335
|
end
|
|
336
336
|
|
|
@@ -351,7 +351,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
351
351
|
|
|
352
352
|
it "adds the uniqueness error" do
|
|
353
353
|
dictionary.valid?
|
|
354
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
354
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
355
355
|
end
|
|
356
356
|
end
|
|
357
357
|
end
|
|
@@ -399,7 +399,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
399
399
|
|
|
400
400
|
it "adds the uniqueness error" do
|
|
401
401
|
dictionary.valid?
|
|
402
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
402
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
403
403
|
end
|
|
404
404
|
end
|
|
405
405
|
end
|
|
@@ -460,7 +460,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
460
460
|
|
|
461
461
|
it "adds the uniqueness error" do
|
|
462
462
|
dictionary.valid?
|
|
463
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
463
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
464
464
|
end
|
|
465
465
|
end
|
|
466
466
|
|
|
@@ -623,7 +623,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
623
623
|
|
|
624
624
|
it "adds the uniqueness errors" do
|
|
625
625
|
dictionary.valid?
|
|
626
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
626
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
627
627
|
end
|
|
628
628
|
end
|
|
629
629
|
|
|
@@ -701,7 +701,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
701
701
|
|
|
702
702
|
it "should set an error for associated object not being unique" do
|
|
703
703
|
item.update_attributes(folder_id: personal_folder.id)
|
|
704
|
-
expect(item.errors.messages[:name].first).to eq("
|
|
704
|
+
expect(item.errors.messages[:name].first).to eq("has already been taken")
|
|
705
705
|
end
|
|
706
706
|
end
|
|
707
707
|
|
|
@@ -753,7 +753,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
753
753
|
|
|
754
754
|
it "adds the uniqueness errors" do
|
|
755
755
|
dictionary.valid?
|
|
756
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
756
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
757
757
|
end
|
|
758
758
|
end
|
|
759
759
|
|
|
@@ -792,7 +792,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
792
792
|
|
|
793
793
|
it "adds the uniqueness errors" do
|
|
794
794
|
dictionary.valid?
|
|
795
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
795
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
796
796
|
end
|
|
797
797
|
end
|
|
798
798
|
end
|
|
@@ -815,7 +815,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
815
815
|
|
|
816
816
|
expect do
|
|
817
817
|
Dictionary.create!(name: "French-English", year: 1960)
|
|
818
|
-
end.to raise_error(Mongoid::Errors::Validations, /Name
|
|
818
|
+
end.to raise_error(Mongoid::Errors::Validations, /Name has already been taken/)
|
|
819
819
|
|
|
820
820
|
expect(Dictionary.all.size).to eq(1)
|
|
821
821
|
end
|
|
@@ -954,7 +954,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
954
954
|
|
|
955
955
|
it "adds the uniqueness errors" do
|
|
956
956
|
dictionary.valid?
|
|
957
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
957
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
958
958
|
end
|
|
959
959
|
end
|
|
960
960
|
|
|
@@ -1018,7 +1018,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1018
1018
|
|
|
1019
1019
|
it "adds the uniqueness error" do
|
|
1020
1020
|
dictionary.valid?
|
|
1021
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
1021
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
1022
1022
|
end
|
|
1023
1023
|
end
|
|
1024
1024
|
|
|
@@ -1096,7 +1096,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1096
1096
|
|
|
1097
1097
|
it "adds the uniqueness error" do
|
|
1098
1098
|
dictionary.valid?
|
|
1099
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
1099
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
1100
1100
|
end
|
|
1101
1101
|
end
|
|
1102
1102
|
|
|
@@ -1218,7 +1218,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1218
1218
|
|
|
1219
1219
|
it "adds the uniqueness error" do
|
|
1220
1220
|
login.valid?
|
|
1221
|
-
expect(login.errors[:username]).to eq([ "
|
|
1221
|
+
expect(login.errors[:username]).to eq([ "has already been taken" ])
|
|
1222
1222
|
end
|
|
1223
1223
|
end
|
|
1224
1224
|
|
|
@@ -1323,7 +1323,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1323
1323
|
|
|
1324
1324
|
it "adds the uniqueness errors" do
|
|
1325
1325
|
login.valid?
|
|
1326
|
-
expect(login.errors[:username]).to eq([ "
|
|
1326
|
+
expect(login.errors[:username]).to eq([ "has already been taken" ])
|
|
1327
1327
|
end
|
|
1328
1328
|
end
|
|
1329
1329
|
|
|
@@ -1383,7 +1383,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1383
1383
|
|
|
1384
1384
|
it "adds the uniqueness error" do
|
|
1385
1385
|
login.valid?
|
|
1386
|
-
expect(login.errors[:username]).to eq([ "
|
|
1386
|
+
expect(login.errors[:username]).to eq([ "has already been taken" ])
|
|
1387
1387
|
end
|
|
1388
1388
|
end
|
|
1389
1389
|
|
|
@@ -1461,7 +1461,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1461
1461
|
|
|
1462
1462
|
it "adds the uniqueness error" do
|
|
1463
1463
|
login.valid?
|
|
1464
|
-
expect(login.errors[:username]).to eq([ "
|
|
1464
|
+
expect(login.errors[:username]).to eq([ "has already been taken" ])
|
|
1465
1465
|
end
|
|
1466
1466
|
end
|
|
1467
1467
|
|
|
@@ -1710,7 +1710,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1710
1710
|
|
|
1711
1711
|
it "adds the uniqueness error" do
|
|
1712
1712
|
definition.valid?
|
|
1713
|
-
expect(definition.errors[:description]).to eq([ "
|
|
1713
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
1714
1714
|
end
|
|
1715
1715
|
end
|
|
1716
1716
|
|
|
@@ -1838,7 +1838,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1838
1838
|
|
|
1839
1839
|
it "adds the uniqueness errors" do
|
|
1840
1840
|
definition.valid?
|
|
1841
|
-
expect(definition.errors[:description]).to eq([ "
|
|
1841
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
1842
1842
|
end
|
|
1843
1843
|
end
|
|
1844
1844
|
|
|
@@ -1976,7 +1976,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1976
1976
|
|
|
1977
1977
|
it "adds the uniqueness errors" do
|
|
1978
1978
|
definition.valid?
|
|
1979
|
-
expect(definition.errors[:description]).to eq([ "
|
|
1979
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
1980
1980
|
end
|
|
1981
1981
|
end
|
|
1982
1982
|
|
|
@@ -2040,7 +2040,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2040
2040
|
|
|
2041
2041
|
it "adds the uniqueness error" do
|
|
2042
2042
|
definition.valid?
|
|
2043
|
-
expect(definition.errors[:description]).to eq([ "
|
|
2043
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
2044
2044
|
end
|
|
2045
2045
|
end
|
|
2046
2046
|
|
|
@@ -2118,7 +2118,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2118
2118
|
|
|
2119
2119
|
it "adds the uniqueness error" do
|
|
2120
2120
|
definition.valid?
|
|
2121
|
-
expect(definition.errors[:description]).to eq([ "
|
|
2121
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
2122
2122
|
end
|
|
2123
2123
|
end
|
|
2124
2124
|
|
|
@@ -2214,7 +2214,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2214
2214
|
it "adds the uniqueness error to the aliased field name" do
|
|
2215
2215
|
definition.valid?
|
|
2216
2216
|
expect(definition.errors).to have_key(:part)
|
|
2217
|
-
expect(definition.errors[:part]).to eq([ "
|
|
2217
|
+
expect(definition.errors[:part]).to eq([ "has already been taken" ])
|
|
2218
2218
|
end
|
|
2219
2219
|
end
|
|
2220
2220
|
|
|
@@ -2231,7 +2231,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2231
2231
|
it "adds the uniqueness error to the underlying field name" do
|
|
2232
2232
|
definition.valid?
|
|
2233
2233
|
expect(definition.errors).to have_key(:p)
|
|
2234
|
-
expect(definition.errors[:p]).to eq([ "
|
|
2234
|
+
expect(definition.errors[:p]).to eq([ "has already been taken" ])
|
|
2235
2235
|
end
|
|
2236
2236
|
end
|
|
2237
2237
|
|
|
@@ -2250,7 +2250,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2250
2250
|
it "adds the uniqueness error to the aliased field name" do
|
|
2251
2251
|
definition.valid?
|
|
2252
2252
|
expect(definition.errors).to have_key(:synonyms)
|
|
2253
|
-
expect(definition.errors[:synonyms]).to eq([ "
|
|
2253
|
+
expect(definition.errors[:synonyms]).to eq([ "has already been taken" ])
|
|
2254
2254
|
end
|
|
2255
2255
|
end
|
|
2256
2256
|
|
|
@@ -2267,7 +2267,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2267
2267
|
it "adds the uniqueness error to the aliased field name" do
|
|
2268
2268
|
definition.valid?
|
|
2269
2269
|
expect(definition.errors).to have_key(:syn)
|
|
2270
|
-
expect(definition.errors[:syn]).to eq([ "
|
|
2270
|
+
expect(definition.errors[:syn]).to eq([ "has already been taken" ])
|
|
2271
2271
|
end
|
|
2272
2272
|
end
|
|
2273
2273
|
end
|
|
@@ -2319,7 +2319,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2319
2319
|
|
|
2320
2320
|
it "adds the uniqueness error" do
|
|
2321
2321
|
word_origin.valid?
|
|
2322
|
-
expect(word_origin.errors[:origin_id]).to eq([ "
|
|
2322
|
+
expect(word_origin.errors[:origin_id]).to eq([ "has already been taken" ])
|
|
2323
2323
|
end
|
|
2324
2324
|
end
|
|
2325
2325
|
|
|
@@ -2444,7 +2444,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2444
2444
|
it "should be invalid" do
|
|
2445
2445
|
subclass_document_with_duplicated_name.tap do |d|
|
|
2446
2446
|
expect(d).to be_invalid
|
|
2447
|
-
expect(d.errors[:name]).to eq([ "
|
|
2447
|
+
expect(d.errors[:name]).to eq([ "has already been taken" ])
|
|
2448
2448
|
end
|
|
2449
2449
|
end
|
|
2450
2450
|
end
|
|
@@ -2472,4 +2472,33 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2472
2472
|
}.to raise_error(Mongo::Error::OperationFailure)
|
|
2473
2473
|
end
|
|
2474
2474
|
end
|
|
2475
|
+
|
|
2476
|
+
describe "i18n" do
|
|
2477
|
+
|
|
2478
|
+
context 'when using a different locale' do
|
|
2479
|
+
|
|
2480
|
+
around do |example|
|
|
2481
|
+
I18n.with_locale(:fr) { example.run }
|
|
2482
|
+
end
|
|
2483
|
+
|
|
2484
|
+
before do
|
|
2485
|
+
# Translation key location is as per rails-i18n gem.
|
|
2486
|
+
# See: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml
|
|
2487
|
+
I18n.backend.store_translations(:fr, { errors: { messages: { taken: 'est déjà utilisé(e)' } } })
|
|
2488
|
+
end
|
|
2489
|
+
|
|
2490
|
+
after do
|
|
2491
|
+
# i18n 1.0 requires +send+ because +translations+ aren't public.
|
|
2492
|
+
# Newer i18n versions have it as public.
|
|
2493
|
+
I18n.backend.send(:translations).delete(:fr)
|
|
2494
|
+
end
|
|
2495
|
+
|
|
2496
|
+
it "correctly translates the error message" do
|
|
2497
|
+
Circus.create!(slogan: 'The Greatest Show on Mars')
|
|
2498
|
+
dict = Circus.new(slogan: 'The Greatest Show on Mars')
|
|
2499
|
+
dict.valid?
|
|
2500
|
+
expect(dict.errors.messages[:slogan]).to eq(["est déjà utilisé(e)"])
|
|
2501
|
+
end
|
|
2502
|
+
end
|
|
2503
|
+
end
|
|
2475
2504
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
describe Mongoid::Warnings do
|
|
6
|
+
|
|
7
|
+
describe ".warn_*" do
|
|
8
|
+
|
|
9
|
+
context "when calling a warn_* method" do
|
|
10
|
+
|
|
11
|
+
let(:id) { :geo_haystack_deprecated }
|
|
12
|
+
let(:message) do
|
|
13
|
+
'The geoHaystack type is deprecated.'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
before do
|
|
17
|
+
warn_id = id
|
|
18
|
+
Mongoid::Warnings.class_eval do
|
|
19
|
+
instance_variable_set("@#{warn_id}", false)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "logs the warning" do
|
|
24
|
+
expect_any_instance_of(Logger).to receive(:warn).once.with(message)
|
|
25
|
+
Mongoid::Warnings.send("warn_#{id}")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "logs the warning only once" do
|
|
29
|
+
expect_any_instance_of(Logger).to receive(:warn).once.with(message)
|
|
30
|
+
Mongoid::Warnings.send("warn_#{id}")
|
|
31
|
+
Mongoid::Warnings.send("warn_#{id}")
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/spec/mongoid_spec.rb
CHANGED
|
@@ -51,14 +51,8 @@ describe Mongoid do
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
it "disconnects from all active clients" do
|
|
54
|
-
method_name = if Gem::Version.new(Mongo::VERSION) >= Gem::Version.new('2.19.0')
|
|
55
|
-
:close
|
|
56
|
-
else
|
|
57
|
-
:disconnect!
|
|
58
|
-
end
|
|
59
|
-
|
|
60
54
|
clients.each do |client|
|
|
61
|
-
expect(client.cluster).to receive(
|
|
55
|
+
expect(client.cluster).to receive(:disconnect!).and_call_original
|
|
62
56
|
end
|
|
63
57
|
Mongoid.disconnect_clients
|
|
64
58
|
end
|
|
@@ -30,11 +30,11 @@ describe "Mongoid::Railties::ControllerRuntime" do
|
|
|
30
30
|
|
|
31
31
|
clear_metric!
|
|
32
32
|
instance.succeeded event_payload
|
|
33
|
-
expect(collector.runtime).to eq(
|
|
33
|
+
expect(collector.runtime).to eq(42000)
|
|
34
34
|
|
|
35
35
|
clear_metric!
|
|
36
36
|
instance.failed event_payload
|
|
37
|
-
expect(collector.runtime).to eq(
|
|
37
|
+
expect(collector.runtime).to eq(42000)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it "resets the metric and returns the value" do
|
data/spec/rails/mongoid_spec.rb
CHANGED
|
@@ -30,6 +30,7 @@ describe "Rails::Mongoid" do
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
context "when preload models config is false" do
|
|
33
|
+
config_override :preload_models, false
|
|
33
34
|
|
|
34
35
|
let(:files) do
|
|
35
36
|
[
|
|
@@ -38,10 +39,6 @@ describe "Rails::Mongoid" do
|
|
|
38
39
|
]
|
|
39
40
|
end
|
|
40
41
|
|
|
41
|
-
before(:all) do
|
|
42
|
-
Mongoid.preload_models = false
|
|
43
|
-
end
|
|
44
|
-
|
|
45
42
|
it "does not load any models" do
|
|
46
43
|
allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
|
|
47
44
|
expect(Rails::Mongoid).to receive(:load_model).never
|
|
@@ -50,10 +47,7 @@ describe "Rails::Mongoid" do
|
|
|
50
47
|
end
|
|
51
48
|
|
|
52
49
|
context "when preload models config is true" do
|
|
53
|
-
|
|
54
|
-
before(:all) do
|
|
55
|
-
Mongoid.preload_models = true
|
|
56
|
-
end
|
|
50
|
+
config_override :preload_models, true
|
|
57
51
|
|
|
58
52
|
context "when all models are in the models directory" do
|
|
59
53
|
|
|
@@ -112,6 +106,7 @@ describe "Rails::Mongoid" do
|
|
|
112
106
|
end
|
|
113
107
|
|
|
114
108
|
context "even when preload models config is false" do
|
|
109
|
+
config_override :preload_models, false
|
|
115
110
|
|
|
116
111
|
let(:files) do
|
|
117
112
|
[
|
|
@@ -120,10 +115,6 @@ describe "Rails::Mongoid" do
|
|
|
120
115
|
]
|
|
121
116
|
end
|
|
122
117
|
|
|
123
|
-
before(:all) do
|
|
124
|
-
Mongoid.preload_models = false
|
|
125
|
-
end
|
|
126
|
-
|
|
127
118
|
it "loads all models" do
|
|
128
119
|
allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
|
|
129
120
|
expect(Rails::Mongoid).to receive(:load_model).with("address")
|
|
@@ -133,6 +124,7 @@ describe "Rails::Mongoid" do
|
|
|
133
124
|
end
|
|
134
125
|
|
|
135
126
|
context "when list of models to load was configured" do
|
|
127
|
+
config_override :preload_models, %w(user AddressNumber)
|
|
136
128
|
|
|
137
129
|
let(:files) do
|
|
138
130
|
[
|
|
@@ -141,10 +133,6 @@ describe "Rails::Mongoid" do
|
|
|
141
133
|
]
|
|
142
134
|
end
|
|
143
135
|
|
|
144
|
-
before(:all) do
|
|
145
|
-
Mongoid.preload_models = ["user", "AddressNumber"]
|
|
146
|
-
end
|
|
147
|
-
|
|
148
136
|
it "loads selected models only" do
|
|
149
137
|
allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
|
|
150
138
|
expect(Rails::Mongoid).to receive(:load_model).with("user")
|
|
@@ -45,16 +45,23 @@ module Mrss
|
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
# Per https://jira.mongodb.org/browse/SERVER-39052, working with FCV
|
|
48
|
-
# in sharded topologies is annoying.
|
|
48
|
+
# in sharded topologies is annoying. Also, FCV doesn't exist in servers
|
|
49
|
+
# less than 3.4. This method returns FCV on 3.4+ servers when in single
|
|
49
50
|
# or RS topologies, and otherwise returns the major.minor server version.
|
|
50
51
|
def fcv_ish
|
|
51
52
|
if server_version.nil?
|
|
52
53
|
raise "Deployment server version not known - check that connection to deployment succeeded"
|
|
53
54
|
end
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
if server_version >= '3.4' && !sharded_ish?
|
|
57
|
+
fcv
|
|
58
|
+
else
|
|
59
|
+
if short_server_version == '4.1'
|
|
60
|
+
'4.2'
|
|
61
|
+
else
|
|
62
|
+
short_server_version
|
|
63
|
+
end
|
|
64
|
+
end
|
|
58
65
|
end
|
|
59
66
|
|
|
60
67
|
# @return [ Mongo::Address ] The address of the primary in the deployment.
|
|
@@ -106,6 +113,34 @@ module Mrss
|
|
|
106
113
|
@topology
|
|
107
114
|
end
|
|
108
115
|
|
|
116
|
+
def storage_engine
|
|
117
|
+
@storage_engine ||= begin
|
|
118
|
+
# 2.6 does not have wired tiger
|
|
119
|
+
if short_server_version == '2.6'
|
|
120
|
+
:mmapv1
|
|
121
|
+
else
|
|
122
|
+
client = ClientRegistry.instance.global_client('root_authorized')
|
|
123
|
+
if sharded_ish?
|
|
124
|
+
shards = client.use(:admin).command(listShards: 1).first
|
|
125
|
+
if shards['shards'].empty?
|
|
126
|
+
raise 'Shards are empty'
|
|
127
|
+
end
|
|
128
|
+
shard = shards['shards'].first
|
|
129
|
+
address_str = shard['host'].sub(/^.*\//, '').sub(/,.*/, '')
|
|
130
|
+
client = ClusterTools.instance.direct_client(address_str,
|
|
131
|
+
SpecConfig.instance.test_options.merge(SpecConfig.instance.auth_options).merge(connect: :direct))
|
|
132
|
+
end
|
|
133
|
+
rv = client.use(:admin).command(serverStatus: 1).first
|
|
134
|
+
rv = rv['storageEngine']['name']
|
|
135
|
+
rv_map = {
|
|
136
|
+
'wiredTiger' => :wired_tiger,
|
|
137
|
+
'mmapv1' => :mmapv1,
|
|
138
|
+
}
|
|
139
|
+
rv_map[rv] || rv
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
109
144
|
# This method returns an alternate address for connecting to the configured
|
|
110
145
|
# deployment. For example, if the replica set is configured with nodes at
|
|
111
146
|
# of localhost:27017 and so on, this method will return 127.0.0.:27017.
|
|
@@ -181,7 +216,7 @@ module Mrss
|
|
|
181
216
|
{}
|
|
182
217
|
end
|
|
183
218
|
|
|
184
|
-
|
|
219
|
+
if !sharded_ish? && short_server_version >= '3.4'
|
|
185
220
|
rv = @server_parameters['featureCompatibilityVersion']
|
|
186
221
|
@fcv = rv['version'] || rv
|
|
187
222
|
end
|
|
@@ -69,15 +69,22 @@ module Mrss
|
|
|
69
69
|
before(:all) do
|
|
70
70
|
case ClusterConfig.instance.topology
|
|
71
71
|
when :single
|
|
72
|
-
skip 'Transactions tests require a replica set or a sharded cluster'
|
|
73
|
-
when :replica_set
|
|
72
|
+
skip 'Transactions tests require a replica set (4.0+) or a sharded cluster (4.2+)'
|
|
73
|
+
when :replica_set
|
|
74
|
+
unless ClusterConfig.instance.server_version >= '4.0'
|
|
75
|
+
skip 'Transactions tests in a replica set topology require server 4.0+'
|
|
76
|
+
end
|
|
77
|
+
when :sharded, :load_balanced
|
|
78
|
+
unless ClusterConfig.instance.server_version >= '4.2'
|
|
79
|
+
skip 'Transactions tests in a sharded cluster topology require server 4.2+'
|
|
80
|
+
end
|
|
74
81
|
else
|
|
75
|
-
raise NotImplementedError
|
|
82
|
+
raise NotImplementedError
|
|
76
83
|
end
|
|
77
84
|
end
|
|
78
85
|
end
|
|
79
86
|
|
|
80
|
-
# Fail command fail point
|
|
87
|
+
# Fail command fail point was added to mongod in 4.0 and to mongos in 4.2.
|
|
81
88
|
def require_fail_command
|
|
82
89
|
require_transaction_support
|
|
83
90
|
end
|
|
@@ -232,11 +239,13 @@ module Mrss
|
|
|
232
239
|
end
|
|
233
240
|
|
|
234
241
|
# Can the driver specify a write concern that won't be overridden?
|
|
235
|
-
# (mongos overrides the write concern)
|
|
242
|
+
# (mongos 4.0+ overrides the write concern)
|
|
236
243
|
def require_set_write_concern
|
|
237
244
|
before(:all) do
|
|
238
|
-
if %i(sharded load_balanced).include?(ClusterConfig.instance.topology)
|
|
239
|
-
|
|
245
|
+
if %i(sharded load_balanced).include?(ClusterConfig.instance.topology) &&
|
|
246
|
+
ClusterConfig.instance.short_server_version >= '4.0'
|
|
247
|
+
then
|
|
248
|
+
skip "mongos 4.0+ overrides write concern"
|
|
240
249
|
end
|
|
241
250
|
end
|
|
242
251
|
end
|
|
@@ -274,6 +283,36 @@ module Mrss
|
|
|
274
283
|
|
|
275
284
|
alias :require_no_multi_shard :require_no_multi_mongos
|
|
276
285
|
|
|
286
|
+
def require_wired_tiger
|
|
287
|
+
before(:all) do
|
|
288
|
+
# Storage detection fails for serverless instances. However, it is safe to
|
|
289
|
+
# assume that a serverless instance uses WiredTiger Storage Engine.
|
|
290
|
+
if !SpecConfig.instance.serverless? && ClusterConfig.instance.storage_engine != :wired_tiger
|
|
291
|
+
skip 'Test requires WiredTiger storage engine'
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def require_wired_tiger_on_36
|
|
297
|
+
before(:all) do
|
|
298
|
+
if ClusterConfig.instance.short_server_version >= '3.6'
|
|
299
|
+
# Storage detection fails for serverless instances. However, it is safe to
|
|
300
|
+
# assume that a serverless instance uses WiredTiger Storage Engine.
|
|
301
|
+
if !SpecConfig.instance.serverless? && ClusterConfig.instance.storage_engine != :wired_tiger
|
|
302
|
+
skip 'Test requires WiredTiger storage engine on 3.6+ servers'
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def require_mmapv1
|
|
309
|
+
before(:all) do
|
|
310
|
+
if SpecConfig.instance.serverless? || ClusterConfig.instance.storage_engine != :mmapv1
|
|
311
|
+
skip 'Test requires MMAPv1 storage engine'
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
277
316
|
def require_enterprise
|
|
278
317
|
before(:all) do
|
|
279
318
|
unless ClusterConfig.instance.enterprise?
|
|
@@ -84,12 +84,12 @@ module Mrss
|
|
|
84
84
|
arg.split('=', 2)
|
|
85
85
|
end]
|
|
86
86
|
|
|
87
|
-
@env['RVM_RUBY'] ||= 'ruby-
|
|
87
|
+
@env['RVM_RUBY'] ||= 'ruby-2.7'
|
|
88
88
|
unless ruby =~ /^j?ruby-/
|
|
89
89
|
raise "RVM_RUBY option is not in expected format: #{ruby}"
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
@env['MONGODB_VERSION'] ||= '
|
|
92
|
+
@env['MONGODB_VERSION'] ||= '4.4'
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
def create_dockerfile
|
|
@@ -178,10 +178,12 @@ module Mrss
|
|
|
178
178
|
|
|
179
179
|
def distro
|
|
180
180
|
@options[:distro] || if app_tests?
|
|
181
|
-
|
|
181
|
+
'ubuntu2004'
|
|
182
182
|
else
|
|
183
183
|
case server_version
|
|
184
|
-
when '
|
|
184
|
+
when '3.6'
|
|
185
|
+
'debian9'
|
|
186
|
+
when '4.0', '4.2'
|
|
185
187
|
'ubuntu1804'
|
|
186
188
|
else
|
|
187
189
|
'ubuntu2004'
|
|
@@ -190,11 +192,15 @@ module Mrss
|
|
|
190
192
|
end
|
|
191
193
|
|
|
192
194
|
BASE_IMAGES = {
|
|
193
|
-
'
|
|
195
|
+
'debian81' => 'debian:jessie',
|
|
196
|
+
'debian92' => 'debian:stretch',
|
|
197
|
+
'debian10' => 'debian:buster',
|
|
198
|
+
'ubuntu1404' => 'ubuntu:trusty',
|
|
199
|
+
'ubuntu1604' => 'ubuntu:xenial',
|
|
194
200
|
'ubuntu1804' => 'ubuntu:bionic',
|
|
195
201
|
'ubuntu2004' => 'ubuntu:focal',
|
|
196
|
-
'
|
|
197
|
-
'
|
|
202
|
+
'rhel62' => 'centos:6',
|
|
203
|
+
'rhel70' => 'centos:7',
|
|
198
204
|
}.freeze
|
|
199
205
|
|
|
200
206
|
def base_image
|
|
@@ -225,10 +231,6 @@ module Mrss
|
|
|
225
231
|
distro =~ /debian|ubuntu/
|
|
226
232
|
end
|
|
227
233
|
|
|
228
|
-
def ubuntu?
|
|
229
|
-
distro=~ /ubuntu/
|
|
230
|
-
end
|
|
231
|
-
|
|
232
234
|
def preload?
|
|
233
235
|
!!@options[:preload]
|
|
234
236
|
end
|
|
@@ -247,12 +249,14 @@ module Mrss
|
|
|
247
249
|
|
|
248
250
|
def libmongocrypt_path
|
|
249
251
|
case distro
|
|
250
|
-
when /
|
|
251
|
-
"
|
|
252
|
-
when /
|
|
253
|
-
"
|
|
252
|
+
when /ubuntu1604/
|
|
253
|
+
"./ubuntu1604/nocrypto/lib64/libmongocrypt.so"
|
|
254
|
+
when /ubuntu1804/
|
|
255
|
+
"./ubuntu1804-64/nocrypto/lib64/libmongocrypt.so"
|
|
256
|
+
when /debian92/
|
|
257
|
+
"./debian92/nocrypto/lib64/libmongocrypt.so"
|
|
254
258
|
else
|
|
255
|
-
raise "This script does not support running FLE tests on #{distro}."
|
|
259
|
+
raise "This script does not support running FLE tests on #{distro}. Use ubuntu1604, ubuntu1804 or debian92 instead"
|
|
256
260
|
end
|
|
257
261
|
end
|
|
258
262
|
|
|
@@ -271,7 +275,7 @@ module Mrss
|
|
|
271
275
|
|
|
272
276
|
def num_exposed_ports
|
|
273
277
|
case @env['TOPOLOGY'] || 'standalone'
|
|
274
|
-
when 'standalone'
|
|
278
|
+
when 'standalone'
|
|
275
279
|
1
|
|
276
280
|
when 'replica-set'
|
|
277
281
|
3
|