simply_stored 0.5.4 → 0.6.0
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.
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +13 -5
- data/README.md +41 -0
- data/lib/simply_stored/couch/belongs_to.rb +6 -8
- data/lib/simply_stored/couch/ext/couch_potato.rb +26 -0
- data/lib/simply_stored/couch/has_many.rb +1 -1
- data/lib/simply_stored/couch.rb +2 -30
- data/lib/simply_stored/instance_methods.rb +14 -8
- data/lib/simply_stored.rb +12 -10
- metadata +175 -56
- data/test/active_model_compatibility_test.rb +0 -23
- data/test/belongs_to_test.rb +0 -173
- data/test/conflict_handling_test.rb +0 -96
- data/test/finder_test.rb +0 -188
- data/test/fixtures/couch.rb +0 -286
- data/test/has_and_belongs_to_many_test.rb +0 -639
- data/test/has_many_test.rb +0 -489
- data/test/has_one_test.rb +0 -154
- data/test/instance_lifecycle_test.rb +0 -249
- data/test/mass_assignment_protection_test.rb +0 -77
- data/test/s3_test.rb +0 -256
- data/test/soft_deletable_test.rb +0 -468
- data/test/test_helper.rb +0 -19
- data/test/validations_test.rb +0 -142
- data/test/views_test.rb +0 -33
@@ -1,639 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/fixtures/couch')
|
3
|
-
|
4
|
-
class HasAndBelongsToManyTest < Test::Unit::TestCase
|
5
|
-
context "has_and_belongs_to_many" do
|
6
|
-
setup do
|
7
|
-
CouchPotato::Config.database_name = 'simply_stored_test'
|
8
|
-
recreate_db
|
9
|
-
end
|
10
|
-
|
11
|
-
context "with has_and_belongs_to_many" do
|
12
|
-
should "create a fetch method for the associated objects" do
|
13
|
-
server = Server.new
|
14
|
-
assert server.respond_to?(:networks)
|
15
|
-
|
16
|
-
network = Network.new
|
17
|
-
assert network.respond_to?(:servers)
|
18
|
-
end
|
19
|
-
|
20
|
-
should "raise an error if another property with the same name already exists" do
|
21
|
-
assert_raise(RuntimeError) do
|
22
|
-
class ::DoubleHasAdnBelongsToManyServer
|
23
|
-
include SimplyStored::Couch
|
24
|
-
property :other_users
|
25
|
-
has_and_belongs_to_many :other_users
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
should "fetch the associated objects" do
|
31
|
-
network = Network.create(:klass => "A")
|
32
|
-
3.times {
|
33
|
-
server = Server.new
|
34
|
-
server.network_ids = [network.id]
|
35
|
-
server.save!
|
36
|
-
}
|
37
|
-
assert_equal 3, network.servers.size
|
38
|
-
end
|
39
|
-
|
40
|
-
should "fetch the associated objects from the other side of the relation" do
|
41
|
-
network = Network.create(:klass => "A")
|
42
|
-
3.times {
|
43
|
-
server = Server.new
|
44
|
-
server.network_ids = [network.id]
|
45
|
-
server.save!
|
46
|
-
}
|
47
|
-
assert_equal 1, Server.first.networks.size
|
48
|
-
end
|
49
|
-
|
50
|
-
should "set the parent object on the clients cache" do
|
51
|
-
Network.expects(:find).never
|
52
|
-
network = Network.create(:klass => "A")
|
53
|
-
3.times {
|
54
|
-
server = Server.new
|
55
|
-
server.add_network(network)
|
56
|
-
}
|
57
|
-
assert_equal network, network.servers.first.networks.first
|
58
|
-
end
|
59
|
-
|
60
|
-
should "set the parent object on the clients cache from the other side of the relation" do
|
61
|
-
Server.expects(:find).never
|
62
|
-
network = Network.create(:klass => "A")
|
63
|
-
3.times {
|
64
|
-
server = Server.new
|
65
|
-
network.add_server(server)
|
66
|
-
}
|
67
|
-
assert_equal network, network.servers.first.networks.first
|
68
|
-
end
|
69
|
-
|
70
|
-
should "work relations from both sides" do
|
71
|
-
network_a = Network.create(:klass => "A")
|
72
|
-
network_b = Network.create(:klass => "B")
|
73
|
-
3.times {
|
74
|
-
server = Server.new
|
75
|
-
server.add_network(network_a)
|
76
|
-
server.add_network(network_b)
|
77
|
-
}
|
78
|
-
assert_equal 3, network_a.servers.size
|
79
|
-
network_a.servers.each do |server|
|
80
|
-
assert_equal 2, server.networks.size
|
81
|
-
end
|
82
|
-
assert_equal 3, network_b.servers.size
|
83
|
-
network_b.servers.each do |server|
|
84
|
-
assert_equal 2, server.networks.size
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
should "work relations from both sides - regardless from where the add was called" do
|
89
|
-
network_a = Network.create(:klass => "A")
|
90
|
-
network_b = Network.create(:klass => "B")
|
91
|
-
3.times {
|
92
|
-
server = Server.new
|
93
|
-
network_a.add_server(server)
|
94
|
-
network_b.add_server(server)
|
95
|
-
}
|
96
|
-
assert_equal 3, network_a.servers.size
|
97
|
-
network_a.servers.each do |server|
|
98
|
-
assert_equal 2, server.networks.size, server.network_ids.inspect
|
99
|
-
end
|
100
|
-
assert_equal 3, network_b.servers.size
|
101
|
-
network_b.servers.each do |server|
|
102
|
-
assert_equal 2, server.networks.size
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
context "limit" do
|
107
|
-
|
108
|
-
should "be able to limit the result set" do
|
109
|
-
network = Network.create(:klass => "A")
|
110
|
-
3.times {
|
111
|
-
server = Server.new
|
112
|
-
server.add_network(network)
|
113
|
-
}
|
114
|
-
assert_equal 2, network.servers(:limit => 2).size
|
115
|
-
end
|
116
|
-
|
117
|
-
should "use the given options in the cache-key" do
|
118
|
-
network = Network.create(:klass => "A")
|
119
|
-
3.times {
|
120
|
-
server = Server.new
|
121
|
-
server.add_network(network)
|
122
|
-
}
|
123
|
-
assert_equal 2, network.servers(:limit => 2).size
|
124
|
-
assert_equal 3, network.servers(:limit => 3).size
|
125
|
-
end
|
126
|
-
|
127
|
-
should "be able to limit the result set - for both directions" do
|
128
|
-
network_a = Network.create(:klass => "A")
|
129
|
-
network_b = Network.create(:klass => "B")
|
130
|
-
3.times {
|
131
|
-
server = Server.new
|
132
|
-
server.add_network(network_a)
|
133
|
-
server.add_network(network_b)
|
134
|
-
}
|
135
|
-
assert_equal 2, network_a.servers(:limit => 2).size
|
136
|
-
assert_equal 3, network_a.servers(:limit => 3).size
|
137
|
-
|
138
|
-
assert_equal 2, network_a.servers.first.networks(:limit => 2).size
|
139
|
-
assert_equal 1, network_a.servers.first.networks(:limit => 1).size
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
context "order" do
|
144
|
-
setup do
|
145
|
-
@network = Network.create(:klass => "A")
|
146
|
-
@network.created_at = Time.local(2000)
|
147
|
-
@network.save!
|
148
|
-
@network_b = Network.create(:klass => "B")
|
149
|
-
@network_b.created_at = Time.local(2002)
|
150
|
-
@network_b.save!
|
151
|
-
3.times do |i|
|
152
|
-
server = Server.new
|
153
|
-
server.add_network(@network)
|
154
|
-
server.add_network(@network_b)
|
155
|
-
server.created_at = Time.local(2000 + i)
|
156
|
-
server.save!
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
should "support different order" do
|
161
|
-
assert_nothing_raised do
|
162
|
-
@network.servers(:order => :asc)
|
163
|
-
end
|
164
|
-
|
165
|
-
assert_nothing_raised do
|
166
|
-
@network.servers(:order => :desc)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
should "reverse the order if :desc" do
|
171
|
-
assert_equal @network.servers(:order => :asc).map(&:id).reverse, @network.servers(:order => :desc).map(&:id)
|
172
|
-
server = @network.servers.first
|
173
|
-
assert_equal server.networks(:order => :asc).map(&:id).reverse, server.networks(:order => :desc).map(&:id)
|
174
|
-
end
|
175
|
-
|
176
|
-
should "work with the limit option" do
|
177
|
-
server = Server.new
|
178
|
-
server.add_network(@network)
|
179
|
-
server.add_network(@network_b)
|
180
|
-
assert_not_equal @network.servers(:order => :asc, :limit => 3).map(&:id).reverse, @network.servers(:order => :desc, :limit => 3).map(&:id)
|
181
|
-
assert_not_equal server.networks(:order => :asc, :limit => 1).map(&:id).reverse, server.networks(:order => :desc, :limit => 1).map(&:id)
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
should "verify the given options for the accessor method" do
|
186
|
-
network = Network.create(:klass => "A")
|
187
|
-
assert_raise(ArgumentError) do
|
188
|
-
network.servers(:foo => :bar)
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
should "verify the given options for the association defintion" do
|
193
|
-
assert_raise(ArgumentError) do
|
194
|
-
Network.instance_eval do
|
195
|
-
has_and_belongs_to_many :foo, :bar => :do
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
should "only fetch objects of the correct type" do
|
201
|
-
network = Network.create(:klass => "A")
|
202
|
-
server = Server.new
|
203
|
-
server.network_ids = [network.id]
|
204
|
-
server.save!
|
205
|
-
|
206
|
-
comment = Comment.new
|
207
|
-
comment.network = network
|
208
|
-
comment.save!
|
209
|
-
|
210
|
-
assert_equal 1, network.servers.size
|
211
|
-
end
|
212
|
-
|
213
|
-
should "getter should user cache" do
|
214
|
-
network = Network.create(:klass => "A")
|
215
|
-
server = Server.new
|
216
|
-
server.network_ids = [network.id]
|
217
|
-
server.save!
|
218
|
-
network.servers
|
219
|
-
assert_equal [server], network.instance_variable_get("@servers")[:all]
|
220
|
-
end
|
221
|
-
|
222
|
-
should "add methods to handle associated objects" do
|
223
|
-
network = Network.create(:klass => "A")
|
224
|
-
assert network.respond_to?(:add_server)
|
225
|
-
assert network.respond_to?(:remove_server)
|
226
|
-
assert network.respond_to?(:remove_all_servers)
|
227
|
-
end
|
228
|
-
|
229
|
-
should "add methods to handle associated objects - for the other side too" do
|
230
|
-
server = Server.create
|
231
|
-
assert server.respond_to?(:add_network)
|
232
|
-
assert server.respond_to?(:remove_network)
|
233
|
-
assert server.respond_to?(:remove_all_networks)
|
234
|
-
end
|
235
|
-
|
236
|
-
should 'ignore the cache when requesting explicit reload' do
|
237
|
-
network = Network.create(:klass => "A")
|
238
|
-
assert_equal [], network.servers
|
239
|
-
server = Server.new
|
240
|
-
server.network_ids = [network.id]
|
241
|
-
server.save!
|
242
|
-
assert_equal [server], network.servers(:force_reload => true)
|
243
|
-
end
|
244
|
-
|
245
|
-
should "use the correct view when handling inheritance" do
|
246
|
-
network = Network.create
|
247
|
-
subnet = Subnet.create
|
248
|
-
server = Server.new
|
249
|
-
server.network_ids = [network.id]
|
250
|
-
server.save!
|
251
|
-
assert_equal 1, network.servers.size
|
252
|
-
server.update_attributes(:network_ids => nil, :subnet_ids => [subnet.id])
|
253
|
-
assert_equal 1, subnet.servers.size
|
254
|
-
end
|
255
|
-
|
256
|
-
context "when adding items" do
|
257
|
-
should "add the item to the internal cache" do
|
258
|
-
network = Network.new(:klass => "C")
|
259
|
-
server = Server.new
|
260
|
-
assert_equal [], network.servers
|
261
|
-
network.add_server(server)
|
262
|
-
assert_equal [server], network.servers
|
263
|
-
assert_equal [server], network.instance_variable_get("@servers")[:all]
|
264
|
-
end
|
265
|
-
|
266
|
-
should "raise an error when the added item is not an object of the expected class" do
|
267
|
-
network = Network.new
|
268
|
-
assert_raise(ArgumentError, 'excepted Server got String') do
|
269
|
-
network.add_server('foo')
|
270
|
-
end
|
271
|
-
end
|
272
|
-
|
273
|
-
should "save the added item" do
|
274
|
-
server = Server.new
|
275
|
-
network = Network.create(:klass => "A")
|
276
|
-
network.add_server(server)
|
277
|
-
assert !server.new_record?
|
278
|
-
end
|
279
|
-
|
280
|
-
should "save the added item - from both directions" do
|
281
|
-
server = Server.new
|
282
|
-
network = Network.create(:klass => "A")
|
283
|
-
server.add_network(network)
|
284
|
-
assert !server.new_record?
|
285
|
-
end
|
286
|
-
|
287
|
-
should 'set the forein key on the added object' do
|
288
|
-
server = Server.new
|
289
|
-
network = Network.create(:klass => "A")
|
290
|
-
network.add_server(server)
|
291
|
-
assert_equal [network.id], server.network_ids
|
292
|
-
end
|
293
|
-
|
294
|
-
should 'set the forein key on the added object - from both directions' do
|
295
|
-
server = Server.new
|
296
|
-
network = Network.create(:klass => "A")
|
297
|
-
server.add_network(network)
|
298
|
-
assert_equal [network.id], server.network_ids
|
299
|
-
end
|
300
|
-
|
301
|
-
should "adding multiple times doesn't hurt" do
|
302
|
-
server = Server.new
|
303
|
-
network = Network.create(:klass => "A")
|
304
|
-
network.add_server(server)
|
305
|
-
network.add_server(server)
|
306
|
-
server.add_network(network)
|
307
|
-
assert_equal [network.id], server.network_ids
|
308
|
-
assert_equal [network.id], Server.find(server.id).network_ids
|
309
|
-
end
|
310
|
-
end
|
311
|
-
|
312
|
-
context "when removing items" do
|
313
|
-
should "should unset the foreign key" do
|
314
|
-
server = Server.new
|
315
|
-
network = Network.create(:klass => "A")
|
316
|
-
network.add_server(server)
|
317
|
-
|
318
|
-
network.remove_server(server)
|
319
|
-
assert_equal [], server.network_ids
|
320
|
-
end
|
321
|
-
|
322
|
-
should "should unset the foreign key - from both directions" do
|
323
|
-
server = Server.new
|
324
|
-
network = Network.create(:klass => "A")
|
325
|
-
network.add_server(server)
|
326
|
-
|
327
|
-
server.remove_network(network)
|
328
|
-
assert_equal [], server.network_ids
|
329
|
-
end
|
330
|
-
|
331
|
-
should "remove the item from the cache" do
|
332
|
-
server = Server.new
|
333
|
-
network = Network.create(:klass => "A")
|
334
|
-
network.add_server(server)
|
335
|
-
assert network.servers.include?(server)
|
336
|
-
network.remove_server(server)
|
337
|
-
assert !network.servers.any?{|s| server.id == s.id}
|
338
|
-
assert_equal [], network.instance_variable_get("@servers")[:all]
|
339
|
-
end
|
340
|
-
|
341
|
-
should "remove the item from the cache - from both directions" do
|
342
|
-
server = Server.new
|
343
|
-
network = Network.create(:klass => "A")
|
344
|
-
network.add_server(server)
|
345
|
-
assert server.networks.include?(network)
|
346
|
-
server.remove_network(network)
|
347
|
-
assert !server.networks.any?{|n| network.id == n.id}
|
348
|
-
assert_equal [], server.instance_variable_get("@networks")[:all]
|
349
|
-
end
|
350
|
-
|
351
|
-
should "save the removed item with the nullified foreign key" do
|
352
|
-
server = Server.new
|
353
|
-
network = Network.create(:klass => "A")
|
354
|
-
network.add_server(server)
|
355
|
-
|
356
|
-
network.remove_server(server)
|
357
|
-
server = Server.find(server.id)
|
358
|
-
assert_equal [], server.network_ids
|
359
|
-
end
|
360
|
-
|
361
|
-
should "save the removed item with the nullified foreign key - from both directions" do
|
362
|
-
server = Server.new
|
363
|
-
network = Network.create(:klass => "A")
|
364
|
-
network.add_server(server)
|
365
|
-
|
366
|
-
server.remove_network(network)
|
367
|
-
server = Server.find(server.id)
|
368
|
-
assert_equal [], server.network_ids
|
369
|
-
end
|
370
|
-
|
371
|
-
should 'raise an error when another object is the owner of the object to be removed' do
|
372
|
-
server = Server.new
|
373
|
-
network = Network.create(:klass => "A")
|
374
|
-
network.add_server(server)
|
375
|
-
|
376
|
-
other_server = Server.create
|
377
|
-
assert_raise(ArgumentError) do
|
378
|
-
network.remove_server(other_server)
|
379
|
-
end
|
380
|
-
end
|
381
|
-
|
382
|
-
should 'raise an error when another object is the owner of the object to be removed - from both directions' do
|
383
|
-
server = Server.new
|
384
|
-
network = Network.create(:klass => "A")
|
385
|
-
network.add_server(server)
|
386
|
-
|
387
|
-
other_network = Network.create
|
388
|
-
assert_raise(ArgumentError) do
|
389
|
-
server.remove_network(other_network)
|
390
|
-
end
|
391
|
-
end
|
392
|
-
|
393
|
-
should 'raise an error when the object is the wrong type' do
|
394
|
-
assert_raise(ArgumentError, 'excepted Server got String') do
|
395
|
-
Network.new.remove_server('foo')
|
396
|
-
end
|
397
|
-
assert_raise(ArgumentError, 'excepted Network got String') do
|
398
|
-
Server.new.remove_network('foo')
|
399
|
-
end
|
400
|
-
end
|
401
|
-
end
|
402
|
-
|
403
|
-
context "when removing all items" do
|
404
|
-
should 'nullify the foreign keys on all referenced items' do
|
405
|
-
server_1 = Server.new
|
406
|
-
server_2 = Server.new
|
407
|
-
network = Network.create(:klass => "A")
|
408
|
-
network.add_server(server_1)
|
409
|
-
network.add_server(server_2)
|
410
|
-
network.remove_all_servers
|
411
|
-
server_1 = Server.find(server_1.id)
|
412
|
-
server_2 = Server.find(server_2.id)
|
413
|
-
assert_equal [], server_1.network_ids
|
414
|
-
assert_equal [], server_2.network_ids
|
415
|
-
end
|
416
|
-
|
417
|
-
should 'nullify the foreign keys on all referenced items - from both directions' do
|
418
|
-
server_1 = Server.new
|
419
|
-
server_2 = Server.new
|
420
|
-
network = Network.create(:klass => "A")
|
421
|
-
network.add_server(server_1)
|
422
|
-
network.add_server(server_2)
|
423
|
-
server_1.remove_all_networks
|
424
|
-
server_1 = Server.find(server_1.id)
|
425
|
-
server_2 = Server.find(server_2.id)
|
426
|
-
assert_equal [], server_1.network_ids
|
427
|
-
assert_equal [network.id], server_2.network_ids
|
428
|
-
end
|
429
|
-
|
430
|
-
should 'empty the cache' do
|
431
|
-
server_1 = Server.new
|
432
|
-
server_2 = Server.new
|
433
|
-
network = Network.create(:klass => "A")
|
434
|
-
network.add_server(server_1)
|
435
|
-
network.add_server(server_2)
|
436
|
-
network.remove_all_servers
|
437
|
-
assert_equal [], network.servers
|
438
|
-
assert_equal [], network.instance_variable_get("@servers")[:all]
|
439
|
-
end
|
440
|
-
|
441
|
-
should 'empty the cache - from both directions' do
|
442
|
-
server_1 = Server.new
|
443
|
-
server_2 = Server.new
|
444
|
-
network = Network.create(:klass => "A")
|
445
|
-
network.add_server(server_1)
|
446
|
-
network.add_server(server_2)
|
447
|
-
server_1.remove_all_networks
|
448
|
-
assert_equal [], server_1.networks
|
449
|
-
assert_equal [], server_1.instance_variable_get("@networks")[:all]
|
450
|
-
end
|
451
|
-
|
452
|
-
context "when counting" do
|
453
|
-
setup do
|
454
|
-
@network = Network.create(:klass => "C")
|
455
|
-
@server = Server.create
|
456
|
-
end
|
457
|
-
|
458
|
-
should "define a count method" do
|
459
|
-
assert @network.respond_to?(:server_count)
|
460
|
-
assert @server.respond_to?(:network_count)
|
461
|
-
end
|
462
|
-
|
463
|
-
should "cache the result" do
|
464
|
-
assert_equal 0, @network.server_count
|
465
|
-
Server.create(:network_ids => [@network.id])
|
466
|
-
assert_equal 0, @network.server_count
|
467
|
-
assert_equal 0, @network.instance_variable_get("@server_count")
|
468
|
-
@network.instance_variable_set("@server_count", nil)
|
469
|
-
assert_equal 1, @network.server_count
|
470
|
-
end
|
471
|
-
|
472
|
-
should "cache the result - from both directions" do
|
473
|
-
assert_equal 0, @server.network_count
|
474
|
-
@server.network_ids = [@network.id]
|
475
|
-
@server.save!
|
476
|
-
assert_equal 0, @server.network_count
|
477
|
-
assert_equal 0, @server.instance_variable_get("@network_count")
|
478
|
-
@server.instance_variable_set("@network_count", nil)
|
479
|
-
assert_equal 1, @server.network_count
|
480
|
-
end
|
481
|
-
|
482
|
-
should "force reload even if cached" do
|
483
|
-
assert_equal 0, @network.server_count
|
484
|
-
Server.create(:network_ids => [@network.id])
|
485
|
-
assert_equal 0, @network.server_count
|
486
|
-
assert_equal 1, @network.server_count(:force_reload => true)
|
487
|
-
end
|
488
|
-
|
489
|
-
should "force reload even if cached - from both directions" do
|
490
|
-
assert_equal 0, @server.network_count
|
491
|
-
@server.network_ids = [@network.id]
|
492
|
-
@server.save!
|
493
|
-
assert_equal 0, @server.network_count
|
494
|
-
assert_equal 1, @server.network_count(:force_reload => true)
|
495
|
-
end
|
496
|
-
|
497
|
-
should "count the number of belongs_to objects" do
|
498
|
-
assert_equal 0, @network.server_count(:force_reload => true)
|
499
|
-
Server.create(:network_ids => [@network.id])
|
500
|
-
assert_equal 1, @network.server_count(:force_reload => true)
|
501
|
-
Server.create(:network_ids => [@network.id])
|
502
|
-
assert_equal 2, @network.server_count(:force_reload => true)
|
503
|
-
Server.create(:network_ids => [@network.id])
|
504
|
-
assert_equal 3, @network.server_count(:force_reload => true)
|
505
|
-
end
|
506
|
-
|
507
|
-
should "count the number of belongs_to objects - from both directions" do
|
508
|
-
assert_equal 0, @server.network_count(:force_reload => true)
|
509
|
-
@server.network_ids = [@network.id]
|
510
|
-
@server.save!
|
511
|
-
assert_equal 1, @server.network_count(:force_reload => true)
|
512
|
-
@server.network_ids = [@network.id, Network.create.id]
|
513
|
-
@server.save!
|
514
|
-
assert_equal 2, @server.network_count(:force_reload => true)
|
515
|
-
end
|
516
|
-
|
517
|
-
should "not count non-releated objects" do
|
518
|
-
Server.all.each{|s| s.delete}
|
519
|
-
network_1 = Network.create(:klass => "A")
|
520
|
-
network_2 = Network.create(:klass => "B")
|
521
|
-
server_1 = Server.create
|
522
|
-
server_2 = Server.create(:network_ids => [network_1.id])
|
523
|
-
server_3 = Server.create(:network_ids => [network_1.id, network_2.id])
|
524
|
-
assert_equal 3, Server.count
|
525
|
-
assert_equal 2, network_1.server_count
|
526
|
-
assert_equal 1, network_2.server_count
|
527
|
-
assert_equal 0, server_1.network_count
|
528
|
-
assert_equal 1, server_2.network_count
|
529
|
-
assert_equal 2, server_3.network_count
|
530
|
-
end
|
531
|
-
|
532
|
-
should "not count deleted objects" do
|
533
|
-
network = Network.create(:klass => "A")
|
534
|
-
server = Server.create(:network_ids => [network.id])
|
535
|
-
assert_equal 1, network.server_count(:force_reload => true)
|
536
|
-
server.delete
|
537
|
-
assert_equal 0, network.server_count(:force_reload => true)
|
538
|
-
end
|
539
|
-
|
540
|
-
should "not count deleted objects - from both directions" do
|
541
|
-
network = Network.create(:klass => "A")
|
542
|
-
server = Server.create(:network_ids => [network.id])
|
543
|
-
assert_equal 1, server.network_count(:force_reload => true)
|
544
|
-
network.delete
|
545
|
-
assert_equal 0, server.network_count(:force_reload => true)
|
546
|
-
end
|
547
|
-
|
548
|
-
end
|
549
|
-
end
|
550
|
-
|
551
|
-
context "with deleted" do
|
552
|
-
should "not fetch deleted objects" do
|
553
|
-
network = Network.create(:klass => "A")
|
554
|
-
server = Server.new
|
555
|
-
server.network_ids = [network.id]
|
556
|
-
server.save!
|
557
|
-
assert_equal 1, network.servers(:force_reload => true).size
|
558
|
-
assert_no_difference "Network.count" do
|
559
|
-
assert_difference "Server.count", -1 do
|
560
|
-
server.delete
|
561
|
-
end
|
562
|
-
end
|
563
|
-
assert_equal 0, network.servers(:force_reload => true).size
|
564
|
-
end
|
565
|
-
|
566
|
-
should "not fetch deleted objects - from both directions" do
|
567
|
-
network = Network.create(:klass => "A")
|
568
|
-
server = Server.new
|
569
|
-
server.network_ids = [network.id]
|
570
|
-
server.save!
|
571
|
-
assert_equal 1, server.networks(:force_reload => true).size
|
572
|
-
assert_difference "Network.count", -1 do
|
573
|
-
assert_no_difference "Server.count" do
|
574
|
-
network.delete
|
575
|
-
end
|
576
|
-
end
|
577
|
-
assert_equal 0, server.networks(:force_reload => true).size, server.networks(:force_reload => true).inspect
|
578
|
-
assert_equal [], server.reload.network_ids
|
579
|
-
end
|
580
|
-
end
|
581
|
-
|
582
|
-
|
583
|
-
context "with soft deleted" do
|
584
|
-
|
585
|
-
should "not load soft deleted - items storing keys" do
|
586
|
-
network = Network.create
|
587
|
-
router = Router.new
|
588
|
-
network.add_router(router)
|
589
|
-
assert_equal 1, network.routers.size
|
590
|
-
router.delete
|
591
|
-
assert_equal 0, Router.count
|
592
|
-
assert_equal 1, Router.count(:with_deleted => true)
|
593
|
-
assert_equal 0, network.routers(:force_reload => true).size
|
594
|
-
assert_equal 1, network.routers(:force_reload => true, :with_deleted => true).size
|
595
|
-
router.delete!
|
596
|
-
assert_equal 0, network.routers(:force_reload => true, :with_deleted => true).size
|
597
|
-
end
|
598
|
-
|
599
|
-
should "not count soft deleted - items storing keys" do
|
600
|
-
network = Network.create
|
601
|
-
router = Router.new
|
602
|
-
network.add_router(router)
|
603
|
-
assert_equal 1, network.routers.size
|
604
|
-
router.delete
|
605
|
-
assert_equal 0, Router.count
|
606
|
-
assert_equal 1, Router.count(:with_deleted => true)
|
607
|
-
assert_equal 0, network.router_count(:force_reload => true)
|
608
|
-
assert_equal 1, network.router_count(:force_reload => true, :with_deleted => true)
|
609
|
-
router.delete!
|
610
|
-
assert_equal 0, network.router_count(:force_reload => true, :with_deleted => true)
|
611
|
-
end
|
612
|
-
|
613
|
-
should "not load soft deleted - items not storing keys: not supported" do
|
614
|
-
book = Book.create
|
615
|
-
author = Author.create
|
616
|
-
author.add_book(book)
|
617
|
-
author.delete
|
618
|
-
assert_equal 0, Author.count
|
619
|
-
assert_equal 1, Author.count(:with_deleted => true)
|
620
|
-
assert_equal 0, book.authors(:force_reload => true).size
|
621
|
-
assert_equal 0, book.authors(:force_reload => true, :with_deleted => true).size
|
622
|
-
end
|
623
|
-
|
624
|
-
should "not count soft deleted - items not storing keys: not supported" do
|
625
|
-
book = Book.create
|
626
|
-
author = Author.create
|
627
|
-
author.add_book(book)
|
628
|
-
author.delete
|
629
|
-
assert_equal 0, Author.count
|
630
|
-
assert_equal 1, Author.count(:with_deleted => true)
|
631
|
-
assert_equal 0, book.author_count(:force_reload => true)
|
632
|
-
assert_equal 0, book.author_count(:force_reload => true, :with_deleted => true)
|
633
|
-
end
|
634
|
-
|
635
|
-
end
|
636
|
-
|
637
|
-
end
|
638
|
-
end
|
639
|
-
end
|