mongoid 8.0.5 → 8.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +3 -3
  4. data/README.md +3 -3
  5. data/Rakefile +0 -25
  6. data/lib/config/locales/en.yml +46 -14
  7. data/lib/mongoid/association/accessors.rb +2 -2
  8. data/lib/mongoid/association/builders.rb +1 -1
  9. data/lib/mongoid/association/embedded/batchable.rb +2 -2
  10. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  11. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -1
  12. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +3 -2
  13. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +6 -6
  14. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -1
  15. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +1 -1
  16. data/lib/mongoid/association/nested/one.rb +40 -2
  17. data/lib/mongoid/association/proxy.rb +1 -1
  18. data/lib/mongoid/association/referenced/counter_cache.rb +2 -2
  19. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
  20. data/lib/mongoid/association/referenced/has_many/enumerable.rb +2 -2
  21. data/lib/mongoid/association/referenced/has_many/proxy.rb +3 -3
  22. data/lib/mongoid/association/reflections.rb +2 -2
  23. data/lib/mongoid/atomic.rb +0 -7
  24. data/lib/mongoid/attributes/dynamic.rb +1 -1
  25. data/lib/mongoid/attributes/nested.rb +2 -2
  26. data/lib/mongoid/attributes/projector.rb +1 -1
  27. data/lib/mongoid/attributes/readonly.rb +1 -1
  28. data/lib/mongoid/attributes.rb +8 -2
  29. data/lib/mongoid/changeable.rb +107 -5
  30. data/lib/mongoid/clients/storage_options.rb +2 -5
  31. data/lib/mongoid/clients/validators/storage.rb +1 -13
  32. data/lib/mongoid/collection_configurable.rb +58 -0
  33. data/lib/mongoid/composable.rb +2 -0
  34. data/lib/mongoid/config/defaults.rb +60 -0
  35. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  36. data/lib/mongoid/config/validators.rb +1 -0
  37. data/lib/mongoid/config.rb +101 -0
  38. data/lib/mongoid/contextual/atomic.rb +1 -1
  39. data/lib/mongoid/contextual/memory.rb +233 -33
  40. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  41. data/lib/mongoid/contextual/mongo.rb +373 -113
  42. data/lib/mongoid/contextual/none.rb +162 -7
  43. data/lib/mongoid/contextual.rb +12 -0
  44. data/lib/mongoid/criteria/findable.rb +2 -2
  45. data/lib/mongoid/criteria/includable.rb +4 -3
  46. data/lib/mongoid/criteria/queryable/key.rb +1 -1
  47. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  48. data/lib/mongoid/criteria/queryable/optional.rb +8 -8
  49. data/lib/mongoid/criteria/queryable/selectable.rb +43 -12
  50. data/lib/mongoid/criteria.rb +6 -5
  51. data/lib/mongoid/deprecable.rb +1 -1
  52. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  53. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  54. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  55. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  56. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  57. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  58. data/lib/mongoid/errors.rb +4 -1
  59. data/lib/mongoid/extensions/object.rb +2 -2
  60. data/lib/mongoid/extensions/time.rb +2 -0
  61. data/lib/mongoid/fields/localized.rb +10 -0
  62. data/lib/mongoid/fields/standard.rb +10 -0
  63. data/lib/mongoid/fields.rb +69 -13
  64. data/lib/mongoid/findable.rb +27 -3
  65. data/lib/mongoid/interceptable.rb +7 -6
  66. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  67. data/lib/mongoid/matcher/type.rb +1 -1
  68. data/lib/mongoid/persistable/creatable.rb +1 -0
  69. data/lib/mongoid/persistable/deletable.rb +1 -1
  70. data/lib/mongoid/persistable/savable.rb +13 -1
  71. data/lib/mongoid/persistable/unsettable.rb +2 -2
  72. data/lib/mongoid/persistable/updatable.rb +51 -1
  73. data/lib/mongoid/persistable/upsertable.rb +20 -1
  74. data/lib/mongoid/persistable.rb +3 -0
  75. data/lib/mongoid/query_cache.rb +5 -1
  76. data/lib/mongoid/railties/database.rake +7 -2
  77. data/lib/mongoid/reloadable.rb +5 -3
  78. data/lib/mongoid/stateful.rb +22 -1
  79. data/lib/mongoid/tasks/database.rake +12 -0
  80. data/lib/mongoid/tasks/database.rb +20 -0
  81. data/lib/mongoid/utils.rb +22 -0
  82. data/lib/mongoid/validatable/macros.rb +5 -5
  83. data/lib/mongoid/validatable.rb +4 -1
  84. data/lib/mongoid/version.rb +1 -1
  85. data/lib/mongoid/warnings.rb +17 -1
  86. data/lib/mongoid.rb +16 -3
  87. data/spec/integration/app_spec.rb +2 -2
  88. data/spec/integration/callbacks_models.rb +37 -0
  89. data/spec/integration/callbacks_spec.rb +134 -0
  90. data/spec/integration/discriminator_key_spec.rb +4 -5
  91. data/spec/integration/i18n_fallbacks_spec.rb +3 -2
  92. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +27 -0
  93. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +20 -25
  94. data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
  95. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  96. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -18
  97. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +5 -27
  98. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +9 -50
  99. data/spec/mongoid/association/syncable_spec.rb +1 -1
  100. data/spec/mongoid/attributes_spec.rb +3 -6
  101. data/spec/mongoid/changeable_spec.rb +299 -24
  102. data/spec/mongoid/clients_spec.rb +122 -13
  103. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  104. data/spec/mongoid/config/defaults_spec.rb +160 -0
  105. data/spec/mongoid/config_spec.rb +154 -18
  106. data/spec/mongoid/contextual/memory_spec.rb +332 -76
  107. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  108. data/spec/mongoid/contextual/mongo_spec.rb +995 -36
  109. data/spec/mongoid/contextual/none_spec.rb +49 -2
  110. data/spec/mongoid/copyable_spec.rb +3 -11
  111. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -10
  112. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  113. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +419 -0
  114. data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -1
  115. data/spec/mongoid/criteria/queryable/selector_spec.rb +1 -1
  116. data/spec/mongoid/criteria_projection_spec.rb +1 -4
  117. data/spec/mongoid/criteria_spec.rb +5 -9
  118. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  119. data/spec/mongoid/extensions/time_spec.rb +8 -43
  120. data/spec/mongoid/extensions/time_with_zone_spec.rb +7 -52
  121. data/spec/mongoid/fields/localized_spec.rb +46 -28
  122. data/spec/mongoid/fields_spec.rb +136 -34
  123. data/spec/mongoid/findable_spec.rb +391 -34
  124. data/spec/mongoid/indexable_spec.rb +16 -10
  125. data/spec/mongoid/interceptable_spec.rb +15 -3
  126. data/spec/mongoid/persistable/deletable_spec.rb +26 -6
  127. data/spec/mongoid/persistable/destroyable_spec.rb +26 -6
  128. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  129. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  130. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  131. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  132. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  133. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  134. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  135. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  136. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  137. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  138. data/spec/mongoid/persistable/upsertable_spec.rb +80 -6
  139. data/spec/mongoid/persistence_context_spec.rb +7 -57
  140. data/spec/mongoid/query_cache_spec.rb +56 -61
  141. data/spec/mongoid/reloadable_spec.rb +24 -28
  142. data/spec/mongoid/scopable_spec.rb +70 -0
  143. data/spec/mongoid/serializable_spec.rb +9 -30
  144. data/spec/mongoid/stateful_spec.rb +122 -8
  145. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  146. data/spec/mongoid/tasks/database_spec.rb +127 -0
  147. data/spec/mongoid/timestamps_spec.rb +9 -11
  148. data/spec/mongoid/touchable_spec.rb +277 -5
  149. data/spec/mongoid/touchable_spec_models.rb +3 -1
  150. data/spec/mongoid/traversable_spec.rb +9 -24
  151. data/spec/mongoid/validatable/uniqueness_spec.rb +2 -3
  152. data/spec/mongoid_spec.rb +36 -10
  153. data/spec/shared/lib/mrss/docker_runner.rb +7 -0
  154. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  155. data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
  156. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  157. data/spec/shared/lib/mrss/utils.rb +28 -6
  158. data/spec/shared/share/Dockerfile.erb +36 -40
  159. data/spec/shared/shlib/server.sh +32 -8
  160. data/spec/shared/shlib/set_env.sh +4 -4
  161. data/spec/spec_helper.rb +5 -0
  162. data/spec/support/immutable_ids.rb +118 -0
  163. data/spec/support/macros.rb +47 -15
  164. data/spec/support/models/artist.rb +0 -1
  165. data/spec/support/models/band.rb +1 -0
  166. data/spec/support/models/book.rb +1 -0
  167. data/spec/support/models/building.rb +2 -0
  168. data/spec/support/models/cover.rb +10 -0
  169. data/spec/support/models/product.rb +1 -0
  170. data.tar.gz.sig +0 -0
  171. metadata +686 -650
  172. metadata.gz.sig +0 -0
  173. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  174. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
@@ -136,21 +136,135 @@ describe Mongoid::Stateful do
136
136
  Band.new
137
137
  end
138
138
 
139
- context "when the document is readonly" do
139
+ context "when legacy_readonly is true" do
140
+ config_override :legacy_readonly, true
140
141
 
141
- before do
142
- document.__selected_fields = { test: 1 }
142
+ context "when the selected fields are set" do
143
+
144
+ before do
145
+ document.__selected_fields = { test: 1 }
146
+ end
147
+
148
+ it "returns true" do
149
+ expect(document).to be_readonly
150
+ end
143
151
  end
144
152
 
145
- it "returns true" do
146
- expect(document).to be_readonly
153
+ context "when no readonly has been set" do
154
+
155
+ it "returns false" do
156
+ expect(document).to_not be_readonly
157
+ end
158
+ end
159
+
160
+ context "when the readonly! method is called" do
161
+
162
+ let(:op) do
163
+ document.readonly!
164
+ end
165
+
166
+ it "returns false" do
167
+ op
168
+ expect(document).to_not be_readonly
169
+ end
170
+
171
+ it "warns" do
172
+ expect(Mongoid::Warnings).to receive(:warn_legacy_readonly)
173
+ op
174
+ end
175
+ end
176
+
177
+ context "when overriding readonly?" do
178
+
179
+ let(:doc) { ReadonlyModel.create! }
180
+
181
+ before do
182
+ class ReadonlyModel
183
+ include Mongoid::Document
184
+
185
+ attr_accessor :locked
186
+
187
+ def readonly?
188
+ !!locked
189
+ end
190
+ end
191
+ end
192
+
193
+ after do
194
+ Object.send(:remove_const, :ReadonlyModel)
195
+ end
196
+
197
+ it "raises when readonly? is true" do
198
+ expect(doc.readonly?).to be false
199
+ doc.locked = true
200
+ expect(doc.readonly?).to be true
201
+ expect do
202
+ doc.destroy
203
+ end.to raise_error(Mongoid::Errors::ReadonlyDocument)
204
+ end
147
205
  end
148
206
  end
149
207
 
150
- context "when no readonly has been set" do
208
+ context "when legacy_readonly is false" do
209
+ config_override :legacy_readonly, false
151
210
 
152
- it "returns false" do
153
- expect(document).to_not be_readonly
211
+ context "when the selected fields are set" do
212
+
213
+ before do
214
+ document.__selected_fields = { test: 1 }
215
+ end
216
+
217
+ it "returns false" do
218
+ expect(document).to_not be_readonly
219
+ end
220
+ end
221
+
222
+ context "when the readonly! method is called" do
223
+
224
+ before do
225
+ document.readonly!
226
+ end
227
+
228
+ it "returns true" do
229
+ expect(document).to be_readonly
230
+ end
231
+ end
232
+
233
+ context "when no readonly has been set" do
234
+
235
+ it "returns false" do
236
+ expect(document).to_not be_readonly
237
+ end
238
+ end
239
+
240
+ context "when overriding readonly?" do
241
+
242
+ let(:doc) { ReadonlyModel.new }
243
+
244
+ before do
245
+ class ReadonlyModel
246
+ include Mongoid::Document
247
+
248
+ attr_accessor :locked
249
+
250
+ def readonly?
251
+ !!locked
252
+ end
253
+ end
254
+ end
255
+
256
+ after do
257
+ Object.send(:remove_const, :ReadonlyModel)
258
+ end
259
+
260
+ it "raises when readonly? is true" do
261
+ expect(doc.readonly?).to be false
262
+ doc.locked = true
263
+ expect(doc.readonly?).to be true
264
+ expect do
265
+ doc.save!
266
+ end.to raise_error(Mongoid::Errors::ReadonlyDocument)
267
+ end
154
268
  end
155
269
  end
156
270
  end
@@ -35,6 +35,22 @@ shared_context "rake task" do
35
35
  task.invoke
36
36
  end
37
37
  end
38
+
39
+ shared_examples_for "create_collections" do
40
+
41
+ it "receives create_collections" do
42
+ expect(Mongoid::Tasks::Database).to receive(:create_collections)
43
+ task.invoke
44
+ end
45
+ end
46
+
47
+ shared_examples_for "force create_collections" do
48
+
49
+ it "receives create_collections" do
50
+ expect(Mongoid::Tasks::Database).to receive(:create_collections).with(force: true)
51
+ task.invoke
52
+ end
53
+ end
38
54
  end
39
55
 
40
56
  shared_context "rails rake task" do
@@ -99,6 +115,10 @@ describe "db:setup" do
99
115
  expect(task.prerequisites).to include("mongoid:create_indexes")
100
116
  end
101
117
 
118
+ it "calls db:mongoid:create_collections" do
119
+ expect(task.prerequisites).to include("mongoid:create_collections")
120
+ end
121
+
102
122
  it "calls db:seed" do
103
123
  expect(task.prerequisites).to include("db:seed")
104
124
  end
@@ -113,6 +133,7 @@ describe "db:setup" do
113
133
 
114
134
  it "works" do
115
135
  expect(Mongoid::Tasks::Database).to receive(:create_indexes)
136
+ expect(Mongoid::Tasks::Database).to receive(:create_collections)
116
137
  expect(Rails).to receive(:root).and_return(".")
117
138
  expect(Rails).to receive(:application).and_return(application)
118
139
  task.invoke
@@ -169,9 +190,14 @@ describe "db:test:prepare" do
169
190
  expect(task.prerequisites).to include("mongoid:create_indexes")
170
191
  end
171
192
 
193
+ it "calls mongoid:create_collections" do
194
+ expect(task.prerequisites).to include("mongoid:create_collections")
195
+ end
196
+
172
197
  it "works" do
173
198
  expect(Rails).to receive(:application).and_return(application)
174
199
  expect(Mongoid::Tasks::Database).to receive(:create_indexes)
200
+ expect(Mongoid::Tasks::Database).to receive(:create_collections)
175
201
  task.invoke
176
202
  end
177
203
  end
@@ -200,6 +226,54 @@ describe "db:mongoid:create_indexes" do
200
226
  end
201
227
  end
202
228
 
229
+ describe "db:mongoid:create_collections" do
230
+ include_context "rake task"
231
+
232
+ it_behaves_like "create_collections"
233
+
234
+ it "calls load_models" do
235
+ expect(task.prerequisites).to include("load_models")
236
+ end
237
+
238
+ it "calls environment" do
239
+ expect(task.prerequisites).to include("environment")
240
+ end
241
+
242
+ context "when using rails task" do
243
+ include_context "rails rake task"
244
+
245
+ before do
246
+ expect(Rails).to receive(:application).and_return(application)
247
+ end
248
+
249
+ it_behaves_like "create_collections"
250
+ end
251
+ end
252
+
253
+ describe "db:mongoid:create_collections:force" do
254
+ include_context "rake task"
255
+
256
+ it_behaves_like "force create_collections"
257
+
258
+ it "calls load_models" do
259
+ expect(task.prerequisites).to include("load_models")
260
+ end
261
+
262
+ it "calls environment" do
263
+ expect(task.prerequisites).to include("environment")
264
+ end
265
+
266
+ context "when using rails task" do
267
+ include_context "rails rake task"
268
+
269
+ before do
270
+ expect(Rails).to receive(:application).and_return(application)
271
+ end
272
+
273
+ it_behaves_like "force create_collections"
274
+ end
275
+ end
276
+
203
277
  describe "db:mongoid:remove_undefined_indexes" do
204
278
  include_context "rake task"
205
279
 
@@ -4,6 +4,59 @@ require "spec_helper"
4
4
 
5
5
  describe "Mongoid::Tasks::Database" do
6
6
 
7
+ before(:all) do
8
+ module DatabaseSpec
9
+ class Measurement
10
+ include Mongoid::Document
11
+
12
+ field :timestamp, type: Time
13
+ field :temperature, type: Integer
14
+
15
+ embeds_many :comments
16
+
17
+ store_in collection: "measurement",
18
+ collection_options: {
19
+ capped: true, size: 10000
20
+ }
21
+ end
22
+
23
+ class Comment
24
+ include Mongoid::Document
25
+
26
+ field :content, type: String
27
+
28
+ embedded_in :measurement
29
+
30
+ store_in collection_options: {
31
+ capped: true, size: 10000
32
+ }
33
+ end
34
+
35
+ class Note
36
+ include Mongoid::Document
37
+
38
+ field :text
39
+
40
+ recursively_embeds_one
41
+
42
+ store_in collection_options: {
43
+ capped: true, size: 10000
44
+ }
45
+ end
46
+ end
47
+ end
48
+
49
+ after(:all) do
50
+ Mongoid.deregister_model(DatabaseSpec::Measurement)
51
+ DatabaseSpec.send(:remove_const, :Measurement)
52
+ Mongoid.deregister_model(DatabaseSpec::Comment)
53
+ DatabaseSpec.send(:remove_const, :Comment)
54
+ Mongoid.deregister_model(DatabaseSpec::Note)
55
+ DatabaseSpec.send(:remove_const, :Note)
56
+ Object.send(:remove_const, :DatabaseSpec)
57
+ end
58
+
59
+
7
60
  let(:logger) do
8
61
  double("logger").tap do |log|
9
62
  allow(log).to receive(:info)
@@ -18,6 +71,80 @@ describe "Mongoid::Tasks::Database" do
18
71
  [ User, Account, Address, Draft ]
19
72
  end
20
73
 
74
+ describe '.create_collections' do
75
+ context 'collection_options are specified' do
76
+ let(:models) do
77
+ [DatabaseSpec::Measurement]
78
+ end
79
+
80
+ after do
81
+ DatabaseSpec::Measurement.collection.drop
82
+ end
83
+
84
+ [true, false].each do |force|
85
+ context "when force is #{force}" do
86
+ it 'creates the collection' do
87
+ expect(DatabaseSpec::Measurement).to receive(:create_collection).once.with(force: force)
88
+ Mongoid::Tasks::Database.create_collections(models, force: force)
89
+ end
90
+ end
91
+ end
92
+ end
93
+
94
+ context 'collection_options are not specified' do
95
+ let(:models) do
96
+ [Person]
97
+ end
98
+
99
+ [true, false].each do |force|
100
+ context "when force is #{force}" do
101
+ it 'creates the collection' do
102
+ expect(Person).to receive(:create_collection).once.with(force: force)
103
+ Mongoid::Tasks::Database.create_collections(models, force: force)
104
+ end
105
+ end
106
+ end
107
+
108
+ context "when collection options is defined on embedded model" do
109
+
110
+ let(:models) do
111
+ [DatabaseSpec::Comment]
112
+ end
113
+
114
+ let(:logger) do
115
+ double("logger").tap do |log|
116
+ expect(log).to receive(:info).once.with(/MONGOID: collection options ignored on: .*, please define in the root model/)
117
+ end
118
+ end
119
+
120
+ before do
121
+ allow(Mongoid::Tasks::Database).to receive(:logger).and_return(logger)
122
+ end
123
+
124
+ it "does nothing, but logging" do
125
+ expect(DatabaseSpec::Comment).to receive(:create_collection).never
126
+ Mongoid::Tasks::Database.create_collections(models)
127
+ end
128
+ end
129
+
130
+ context "when collection options is defined on cyclic model" do
131
+
132
+ let(:models) do
133
+ [DatabaseSpec::Note]
134
+ end
135
+
136
+ after do
137
+ DatabaseSpec::Note.collection.drop
138
+ end
139
+
140
+ it "creates the collection" do
141
+ expect(DatabaseSpec::Note).to receive(:create_collection).once
142
+ Mongoid::Tasks::Database.create_collections(models)
143
+ end
144
+ end
145
+ end
146
+ end
147
+
21
148
  describe ".create_indexes" do
22
149
 
23
150
  let!(:klass) do
@@ -17,12 +17,7 @@ describe Mongoid::Timestamps do
17
17
 
18
18
  let(:time_zone) { "Pacific Time (US & Canada)" }
19
19
 
20
- around do |ex|
21
- z = Time.zone
22
- Time.zone = time_zone
23
- ex.run
24
- Time.zone = z
25
- end
20
+ time_zone_override "Pacific Time (US & Canada)"
26
21
 
27
22
  before do
28
23
  document.run_callbacks(:create)
@@ -77,17 +72,20 @@ describe Mongoid::Timestamps do
77
72
  context "when the document has changed with updated_at specified" do
78
73
 
79
74
  let(:document) do
80
- Dokument.new(created_at: Time.now.utc)
75
+ Dokument.create(created_at: Time.now.utc)
76
+ end
77
+
78
+ let(:expected_updated_at) do
79
+ DateTime.parse("2001-06-12")
81
80
  end
82
81
 
83
82
  before do
84
- document.new_record = false
85
- document.updated_at = DateTime.parse("2001-06-12")
83
+ document.updated_at = expected_updated_at
86
84
  end
87
85
 
88
86
  it "does not set updated at" do
89
- expect(document).to receive(:updated_at=).never
90
87
  document.save!
88
+ expect(document.reload.updated_at).to be == expected_updated_at
91
89
  end
92
90
  end
93
91
 
@@ -127,7 +125,7 @@ describe Mongoid::Timestamps do
127
125
  end
128
126
 
129
127
  # This section of tests describes the behavior of the updated_at field for
130
- # different updates on associations, as outlined in PR #5219.
128
+ # different updates on referenced associations, as outlined in PR #5219.
131
129
  describe "updated_at attribute" do
132
130
  let!(:start_time) { Timecop.freeze(Time.at(Time.now.to_i)) }
133
131