mongoid 8.0.4 → 8.0.6

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.
@@ -567,6 +567,49 @@ describe Mongoid::Fields do
567
567
  end
568
568
  end
569
569
  end
570
+
571
+ context 'when the field is declared as BSON::Decimal128' do
572
+ let(:document) { Mop.create!(decimal128_field: BSON::Decimal128.new(Math::PI.to_s)).reload }
573
+
574
+ shared_context 'BSON::Decimal128 is BigDecimal' do
575
+ it 'should return a BigDecimal' do
576
+ expect(document.decimal128_field).to be_a BigDecimal
577
+ end
578
+ end
579
+
580
+ shared_context 'BSON::Decimal128 is BSON::Decimal128' do
581
+ it 'should return a BSON::Decimal128' do
582
+ expect(document.decimal128_field).to be_a BSON::Decimal128
583
+ end
584
+ end
585
+
586
+ it 'is declared as BSON::Decimal128' do
587
+ expect(Mop.fields['decimal128_field'].type).to be == BSON::Decimal128
588
+ end
589
+
590
+ context 'when BSON version <= 4' do
591
+ max_bson_version '4.99.99'
592
+ it_behaves_like 'BSON::Decimal128 is BSON::Decimal128'
593
+ end
594
+
595
+ context 'when BSON version >= 5' do
596
+ min_bson_version '5.0.0'
597
+
598
+ context 'when allow_bson5_decimal128 is false' do
599
+ config_override :allow_bson5_decimal128, false
600
+ it_behaves_like 'BSON::Decimal128 is BigDecimal'
601
+ end
602
+
603
+ context 'when allow_bson5_decimal128 is true' do
604
+ config_override :allow_bson5_decimal128, true
605
+ it_behaves_like 'BSON::Decimal128 is BSON::Decimal128'
606
+ end
607
+
608
+ context 'when allow_bson5_decimal128 is default' do
609
+ it_behaves_like 'BSON::Decimal128 is BigDecimal'
610
+ end
611
+ end
612
+ end
570
613
  end
571
614
 
572
615
  describe "#getter_before_type_cast" do
@@ -390,6 +390,30 @@ describe Mongoid::Reloadable do
390
390
  end
391
391
  end
392
392
 
393
+ context 'when embeds_many is modified' do
394
+ let(:contractor1) { Contractor.new(name: 'b') }
395
+ let(:contractor2) { Contractor.new(name: 'c') }
396
+
397
+ let(:building) do
398
+ Building.create!(contractors: [ contractor1 ])
399
+ end
400
+
401
+ let(:more_contractors) { building.contractors + [ contractor2 ] }
402
+
403
+ let(:modified_building) do
404
+ building.tap do
405
+ building.assign_attributes contractors: more_contractors
406
+ end
407
+ end
408
+
409
+ let(:reloaded_building) { modified_building.reload }
410
+
411
+ it 'resets delayed_atomic_sets' do
412
+ expect(modified_building.delayed_atomic_sets).not_to be_empty
413
+ expect(reloaded_building.delayed_atomic_sets).to be_empty
414
+ end
415
+ end
416
+
393
417
  context "when embedded document is nil" do
394
418
 
395
419
  let(:palette) do
data/spec/mongoid_spec.rb CHANGED
@@ -52,7 +52,7 @@ describe Mongoid do
52
52
 
53
53
  it "disconnects from all active clients" do
54
54
  clients.each do |client|
55
- expect(client.cluster).to receive(:disconnect!).and_call_original
55
+ expect(client).to receive(:close).and_call_original
56
56
  end
57
57
  Mongoid.disconnect_clients
58
58
  end
@@ -84,22 +84,32 @@ module Mrss
84
84
 
85
85
  # Locates command stated events for the specified command name,
86
86
  # asserts that there is exactly one such event, and returns it.
87
- def single_command_started_event(command_name, include_auth: false)
87
+ def single_command_started_event(command_name, include_auth: false, database_name: nil)
88
88
  events = if include_auth
89
89
  started_events
90
90
  else
91
91
  non_auth_command_started_events
92
92
  end
93
- events.select! do |event|
94
- event.command[command_name]
93
+ get_one_event(events, command_name, 'started', database_name: database_name)
94
+ end
95
+
96
+ # Locates command succeeded events for the specified command name,
97
+ # asserts that there is exactly one such event, and returns it.
98
+ def single_command_succeeded_event(command_name, database_name: nil)
99
+ get_one_event(succeeded_events, command_name, 'succeeded', database_name: database_name)
100
+ end
101
+
102
+ def get_one_event(events, command_name, kind, database_name: nil)
103
+ events = events.select do |event|
104
+ event.command_name == command_name and
105
+ database_name.nil? || database_name == event.database_name
95
106
  end
96
107
  if events.length != 1
97
- raise "Expected a single #{command_name} event but we have #{events.length}"
108
+ raise "Expected a single '#{command_name}' #{kind} event#{database_name ? " for '#{database_name}'" : ''} but we have #{events.length}"
98
109
  end
99
110
  events.first
100
111
  end
101
112
 
102
-
103
113
  # Get the first succeeded event published for the name, and then delete it.
104
114
  #
105
115
  # @param [ String ] name The event name.
@@ -209,6 +209,14 @@ module Mrss
209
209
  end
210
210
  end
211
211
 
212
+ def require_no_fallbacks
213
+ before(:all) do
214
+ if %w(yes true 1).include?((ENV['TEST_I18N_FALLBACKS'] || '').downcase)
215
+ skip 'Set TEST_I18N_FALLBACKS=0 environment variable to run these tests'
216
+ end
217
+ end
218
+ end
219
+
212
220
  # This is a macro for retrying flaky tests on CI that occasionally fail.
213
221
  # Note that the tests will only be retried on CI.
214
222
  #
@@ -71,12 +71,12 @@ prepare_server_from_url() {
71
71
  export PATH="$BINDIR":$PATH
72
72
  }
73
73
 
74
- install_mlaunch_virtualenv() {
74
+ install_mlaunch_venv() {
75
75
  python3 -V || true
76
- if ! python3 -m virtualenv -h >/dev/null; then
76
+ if ! python3 -m venv -h >/dev/null; then
77
77
  # Current virtualenv fails with
78
78
  # https://github.com/pypa/virtualenv/issues/1630
79
- python3 -m pip install 'virtualenv<20' --user
79
+ python3 -m pip install venv --user
80
80
  fi
81
81
  if test "$USE_SYSTEM_PYTHON_PACKAGES" = 1 &&
82
82
  python3 -m pip list |grep mtools
@@ -85,13 +85,13 @@ install_mlaunch_virtualenv() {
85
85
  :
86
86
  else
87
87
  venvpath="$MONGO_ORCHESTRATION_HOME"/venv
88
- python3 -m virtualenv -p python3 $venvpath
88
+ python3 -m venv $venvpath
89
89
  . $venvpath/bin/activate
90
90
  # [mlaunch] does not work:
91
91
  # https://github.com/rueckstiess/mtools/issues/856
92
92
  # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
93
93
  #pip install 'mtools==1.7' 'pymongo==4.1' python-dateutil psutil
94
-
94
+
95
95
  # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
96
96
  pip install 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
97
97
  fi
@@ -70,6 +70,7 @@ class Person
70
70
  embeds_many :messages, validate: false
71
71
 
72
72
  embeds_one :passport, autobuild: true, store_as: :pass, validate: false
73
+ embeds_one :purse, store_as: "Purse"
73
74
  embeds_one :pet, class_name: "Animal", validate: false
74
75
  embeds_one :name, as: :namable, validate: false do
75
76
  def extension
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Purse
4
+ include Mongoid::Document
5
+
6
+ field :brand, type: String
7
+
8
+ embedded_in :person
9
+ end
data.tar.gz.sig CHANGED
Binary file