mongoid-list 0.1.8 → 0.2.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/Guardfile +4 -8
- data/lib/mongoid/list.rb +5 -1
- data/lib/mongoid/list/collection.rb +3 -5
- data/lib/mongoid/list/embedded.rb +2 -3
- data/lib/mongoid/list/version.rb +1 -1
- data/mongoid-list.gemspec +11 -11
- data/mongoid.yml +12 -0
- data/spec/mongoid/list/collection_spec.rb +147 -0
- data/spec/mongoid/list/embedded_spec.rb +181 -0
- data/spec/mongoid/list_spec.rb +844 -0
- data/spec/spec_helper.rb +66 -0
- data/spec/support/models/container.rb +8 -0
- data/{test → spec}/support/models/embedded.rb +0 -0
- data/{test → spec}/support/models/embedded_deeply.rb +0 -0
- data/{test → spec}/support/models/scoped.rb +0 -0
- data/{test → spec}/support/models/scoped_embedded.rb +0 -0
- data/{test → spec}/support/models/simple.rb +0 -0
- metadata +47 -62
- data/test/mongoid/list/collection_test.rb +0 -141
- data/test/mongoid/list/embedded_test.rb +0 -174
- data/test/mongoid/list_test.rb +0 -869
- data/test/support/models/container.rb +0 -8
- data/test/test_helper.rb +0 -27
@@ -0,0 +1,844 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::List do
|
4
|
+
|
5
|
+
describe "Creation" do
|
6
|
+
|
7
|
+
context "simple" do
|
8
|
+
|
9
|
+
let!(:list1) { Simple.create }
|
10
|
+
let!(:list2) { Simple.create }
|
11
|
+
|
12
|
+
it "should have set list1's position to 1" do
|
13
|
+
list1.position.should eq 1
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should have set list2's position to 2" do
|
17
|
+
list2.position.should eq 2
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
context "in embedded collection" do
|
23
|
+
|
24
|
+
let!(:container) { Container.create }
|
25
|
+
let!(:list1) { container.items.create }
|
26
|
+
let!(:list2) { container.items.create }
|
27
|
+
let!(:list3) { container.items.create }
|
28
|
+
let!(:unrelated_list) { Container.create.items.create }
|
29
|
+
|
30
|
+
it "should have created the container" do
|
31
|
+
container.items.count.should eq 3
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should have set the initial positions for each list item" do
|
35
|
+
list1.position.should eq 1
|
36
|
+
list2.position.should eq 2
|
37
|
+
list3.position.should eq 3
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should have also set the unrelated_list's position independently" do
|
41
|
+
unrelated_list.position.should eq 1
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
describe "Updating" do
|
50
|
+
|
51
|
+
let!(:list1) { Simple.create }
|
52
|
+
let!(:list2) { Simple.create }
|
53
|
+
let!(:list3) { Simple.create }
|
54
|
+
let!(:list4) { Simple.create }
|
55
|
+
|
56
|
+
it "should have set initial positions" do
|
57
|
+
list1.position.should eq 1
|
58
|
+
list2.position.should eq 2
|
59
|
+
list3.position.should eq 3
|
60
|
+
list4.position.should eq 4
|
61
|
+
end
|
62
|
+
|
63
|
+
context "for @list2 going to position of 1" do
|
64
|
+
|
65
|
+
before do
|
66
|
+
list2.update_attributes(position: 1)
|
67
|
+
list1.reload
|
68
|
+
list2.reload
|
69
|
+
list3.reload
|
70
|
+
list4.reload
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should have updated everyone's :position" do
|
74
|
+
list1.position.should eq 2
|
75
|
+
list2.position.should eq 1
|
76
|
+
list3.position.should eq 3
|
77
|
+
list4.position.should eq 4
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
context "for list3 going to position of 1" do
|
83
|
+
|
84
|
+
before do
|
85
|
+
list3.update_attributes(position: 1)
|
86
|
+
list1.reload
|
87
|
+
list2.reload
|
88
|
+
list3.reload
|
89
|
+
list4.reload
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should have updated everyone's :position" do
|
93
|
+
list1.position.should eq 2
|
94
|
+
list2.position.should eq 3
|
95
|
+
list3.position.should eq 1
|
96
|
+
list4.position.should eq 4
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
context "for list1 going to position of 2" do
|
102
|
+
|
103
|
+
before do
|
104
|
+
list1.update_attributes(position: 2)
|
105
|
+
list1.reload
|
106
|
+
list2.reload
|
107
|
+
list3.reload
|
108
|
+
list4.reload
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should have updated everyone's :position" do
|
112
|
+
list1.position.should eq 2
|
113
|
+
list2.position.should eq 1
|
114
|
+
list3.position.should eq 3
|
115
|
+
list4.position.should eq 4
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
context "for list1 going to position of 3" do
|
121
|
+
|
122
|
+
before do
|
123
|
+
list1.update_attributes(position: 3)
|
124
|
+
list1.reload
|
125
|
+
list2.reload
|
126
|
+
list3.reload
|
127
|
+
list4.reload
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should have updated everyone's :position" do
|
131
|
+
list1.position.should eq 3
|
132
|
+
list2.position.should eq 1
|
133
|
+
list3.position.should eq 2
|
134
|
+
list4.position.should eq 4
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
describe "Updating Embedded" do
|
143
|
+
|
144
|
+
let!(:container) { Container.create }
|
145
|
+
let!(:list1) { container.items.create }
|
146
|
+
let!(:list2) { container.items.create }
|
147
|
+
let!(:list3) { container.items.create }
|
148
|
+
let!(:list4) { container.items.create }
|
149
|
+
|
150
|
+
it "should have set initial positions" do
|
151
|
+
list1.position.should eq 1
|
152
|
+
list2.position.should eq 2
|
153
|
+
list3.position.should eq 3
|
154
|
+
list4.position.should eq 4
|
155
|
+
end
|
156
|
+
|
157
|
+
context "for list2 going to position of 1" do
|
158
|
+
|
159
|
+
before do
|
160
|
+
list2.update_attributes(position: 1)
|
161
|
+
container.reload
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should have updated everyone's :position" do
|
165
|
+
container.items.find(list1.id).position.should eq 2
|
166
|
+
container.items.find(list2.id).position.should eq 1
|
167
|
+
container.items.find(list3.id).position.should eq 3
|
168
|
+
container.items.find(list4.id).position.should eq 4
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
context "for list3 going to position of 1" do
|
174
|
+
|
175
|
+
before do
|
176
|
+
list3.update_attributes(position: 1)
|
177
|
+
container.reload
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should have updated everyone's :position" do
|
181
|
+
container.items.find(list1.id).position.should eq 2
|
182
|
+
container.items.find(list2.id).position.should eq 3
|
183
|
+
container.items.find(list3.id).position.should eq 1
|
184
|
+
container.items.find(list4.id).position.should eq 4
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
188
|
+
|
189
|
+
context "for list1 going to position of 2" do
|
190
|
+
|
191
|
+
before do
|
192
|
+
list1.update_attributes(position: 2)
|
193
|
+
container.reload
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should have updated everyone's :position" do
|
197
|
+
container.items.find(list1.id).position.should eq 2
|
198
|
+
container.items.find(list2.id).position.should eq 1
|
199
|
+
container.items.find(list3.id).position.should eq 3
|
200
|
+
container.items.find(list4.id).position.should eq 4
|
201
|
+
end
|
202
|
+
|
203
|
+
end
|
204
|
+
|
205
|
+
context "for list1 going to position of 3" do
|
206
|
+
|
207
|
+
before do
|
208
|
+
list1.update_attributes(position: 3)
|
209
|
+
container.reload
|
210
|
+
end
|
211
|
+
|
212
|
+
it "should have updated everyone's :position" do
|
213
|
+
container.items.find(list1.id).position.should eq 3
|
214
|
+
container.items.find(list2.id).position.should eq 1
|
215
|
+
container.items.find(list3.id).position.should eq 2
|
216
|
+
container.items.find(list4.id).position.should eq 4
|
217
|
+
end
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
end
|
222
|
+
|
223
|
+
|
224
|
+
context "#destroy" do
|
225
|
+
|
226
|
+
let!(:list1) { Simple.create }
|
227
|
+
let!(:list2) { Simple.create }
|
228
|
+
let!(:list3) { Simple.create }
|
229
|
+
let!(:list4) { Simple.create }
|
230
|
+
|
231
|
+
context "from the first position" do
|
232
|
+
|
233
|
+
before do
|
234
|
+
list1.destroy
|
235
|
+
list2.reload
|
236
|
+
list3.reload
|
237
|
+
list4.reload
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should have moved all other items up" do
|
241
|
+
list2.position.should eq 1
|
242
|
+
list3.position.should eq 2
|
243
|
+
list4.position.should eq 3
|
244
|
+
end
|
245
|
+
|
246
|
+
end
|
247
|
+
|
248
|
+
context "removing from the 2nd position" do
|
249
|
+
|
250
|
+
before do
|
251
|
+
list2.destroy
|
252
|
+
list1.reload
|
253
|
+
list3.reload
|
254
|
+
list4.reload
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should have kept list1 where it was" do
|
258
|
+
list1.position.should eq 1
|
259
|
+
end
|
260
|
+
|
261
|
+
it "should have moved lower items up" do
|
262
|
+
list3.position.should eq 2
|
263
|
+
list4.position.should eq 3
|
264
|
+
end
|
265
|
+
|
266
|
+
end
|
267
|
+
|
268
|
+
context "removing from the 4th and last position" do
|
269
|
+
|
270
|
+
before do
|
271
|
+
list4.destroy
|
272
|
+
list1.reload
|
273
|
+
list2.reload
|
274
|
+
list3.reload
|
275
|
+
end
|
276
|
+
|
277
|
+
it "should have kept everything else where it was" do
|
278
|
+
list1.position.should eq 1
|
279
|
+
list2.position.should eq 2
|
280
|
+
list3.position.should eq 3
|
281
|
+
end
|
282
|
+
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|
286
|
+
|
287
|
+
|
288
|
+
context "#destroy in Embedded" do
|
289
|
+
|
290
|
+
let!(:container) { Container.create }
|
291
|
+
let!(:list1) { container.items.create }
|
292
|
+
let!(:list2) { container.items.create }
|
293
|
+
let!(:list3) { container.items.create }
|
294
|
+
let!(:list4) { container.items.create }
|
295
|
+
|
296
|
+
context "from the first position" do
|
297
|
+
|
298
|
+
before do
|
299
|
+
list1.destroy
|
300
|
+
container.reload
|
301
|
+
end
|
302
|
+
|
303
|
+
it "should have moved all other items up" do
|
304
|
+
container.items.find(list2.id).position.should eq 1
|
305
|
+
container.items.find(list3.id).position.should eq 2
|
306
|
+
container.items.find(list4.id).position.should eq 3
|
307
|
+
end
|
308
|
+
|
309
|
+
end
|
310
|
+
|
311
|
+
context "removing from the 2nd position" do
|
312
|
+
|
313
|
+
before do
|
314
|
+
list2.destroy
|
315
|
+
container.reload
|
316
|
+
end
|
317
|
+
|
318
|
+
it "should have kept list1 where it was" do
|
319
|
+
container.items.find(list1.id).position.should eq 1
|
320
|
+
end
|
321
|
+
|
322
|
+
it "should have moved list3 up to :position 2" do
|
323
|
+
container.items.find(list3.id).position.should eq 2
|
324
|
+
end
|
325
|
+
|
326
|
+
it "should have moved list4 up to :position 3" do
|
327
|
+
container.items.find(list4.id).position.should eq 3
|
328
|
+
end
|
329
|
+
|
330
|
+
end
|
331
|
+
|
332
|
+
context "removing from the 4th and last position" do
|
333
|
+
|
334
|
+
before do
|
335
|
+
list4.destroy
|
336
|
+
container.reload
|
337
|
+
end
|
338
|
+
|
339
|
+
it "should have kept everything else where it was" do
|
340
|
+
container.items.find(list1.id).position.should eq 1
|
341
|
+
container.items.find(list2.id).position.should eq 2
|
342
|
+
container.items.find(list3.id).position.should eq 3
|
343
|
+
end
|
344
|
+
|
345
|
+
end
|
346
|
+
|
347
|
+
end
|
348
|
+
|
349
|
+
context "#destroy Item from Deeply Embedded List" do
|
350
|
+
|
351
|
+
let!(:container) { Container.create }
|
352
|
+
let!(:list) { container.items.create }
|
353
|
+
let!(:item1) { list.items.create }
|
354
|
+
let!(:item2) { list.items.create }
|
355
|
+
let!(:item3) { list.items.create }
|
356
|
+
|
357
|
+
context "from 1st position" do
|
358
|
+
|
359
|
+
before do
|
360
|
+
item1.destroy
|
361
|
+
container.reload
|
362
|
+
end
|
363
|
+
|
364
|
+
it "should have moved all other items up" do
|
365
|
+
container.items.first.items.find(item2.id).position.should eq 1
|
366
|
+
container.items.first.items.find(item3.id).position.should eq 2
|
367
|
+
end
|
368
|
+
|
369
|
+
end
|
370
|
+
|
371
|
+
context "from middle position" do
|
372
|
+
|
373
|
+
before do
|
374
|
+
item2.destroy
|
375
|
+
container.reload
|
376
|
+
end
|
377
|
+
|
378
|
+
it "should have moved last items up" do
|
379
|
+
container.items.first.items.find(item1.id).position.should eq 1
|
380
|
+
container.items.first.items.find(item3.id).position.should eq 2
|
381
|
+
end
|
382
|
+
|
383
|
+
end
|
384
|
+
|
385
|
+
end
|
386
|
+
|
387
|
+
|
388
|
+
describe "#list_scoped?" do
|
389
|
+
|
390
|
+
context "for Simple (unscoped)" do
|
391
|
+
|
392
|
+
subject { Simple.new }
|
393
|
+
it { should_not be_list_scoped }
|
394
|
+
|
395
|
+
end
|
396
|
+
|
397
|
+
context "for Scoped" do
|
398
|
+
|
399
|
+
subject { Scoped.new }
|
400
|
+
it { should be_list_scoped }
|
401
|
+
|
402
|
+
end
|
403
|
+
|
404
|
+
end
|
405
|
+
|
406
|
+
|
407
|
+
describe "#list_scope_field" do
|
408
|
+
|
409
|
+
subject { Scoped.create }
|
410
|
+
|
411
|
+
it "should be :group" do
|
412
|
+
subject.list_scope_field.should eq :group
|
413
|
+
end
|
414
|
+
|
415
|
+
end
|
416
|
+
|
417
|
+
|
418
|
+
describe "#list_scope_conditions" do
|
419
|
+
|
420
|
+
context "when unscoped" do
|
421
|
+
|
422
|
+
subject { Simple.new }
|
423
|
+
|
424
|
+
let(:expected_conditions) do
|
425
|
+
{}
|
426
|
+
end
|
427
|
+
|
428
|
+
it "should be an empty hash" do
|
429
|
+
subject.list_scope_conditions.should eq expected_conditions
|
430
|
+
end
|
431
|
+
|
432
|
+
end
|
433
|
+
|
434
|
+
context "when scoped" do
|
435
|
+
|
436
|
+
subject { Scoped.new(group: "a grouping") }
|
437
|
+
|
438
|
+
let(:expected_conditions) do
|
439
|
+
{ group: "a grouping" }
|
440
|
+
end
|
441
|
+
|
442
|
+
it "should have be for a :group of 'a grouping'" do
|
443
|
+
subject.list_scope_conditions.should eq expected_conditions
|
444
|
+
end
|
445
|
+
|
446
|
+
end
|
447
|
+
|
448
|
+
end
|
449
|
+
|
450
|
+
|
451
|
+
describe "Initializing in multiple scopes" do
|
452
|
+
|
453
|
+
|
454
|
+
context "on a Collection" do
|
455
|
+
|
456
|
+
let!(:group1_1) { Scoped.create(group: 1) }
|
457
|
+
let!(:group2_1) { Scoped.create(group: 2) }
|
458
|
+
let!(:group2_2) { Scoped.create(group: 2) }
|
459
|
+
|
460
|
+
it "should default group1_1 to a :position of 1" do
|
461
|
+
group1_1.position.should eq 1
|
462
|
+
end
|
463
|
+
|
464
|
+
it "should default group2_1 to a :position of 1" do
|
465
|
+
group2_1.position.should eq 1
|
466
|
+
end
|
467
|
+
|
468
|
+
it "should default group2_2 to a :position of 2" do
|
469
|
+
group2_2.position.should eq 2
|
470
|
+
end
|
471
|
+
end
|
472
|
+
|
473
|
+
context "on Embedded Documents" do
|
474
|
+
|
475
|
+
let!(:container) { Container.create }
|
476
|
+
let!(:group1_1) { container.scoped_items.create(group: 1) }
|
477
|
+
let!(:group1_2) { container.scoped_items.create(group: 1) }
|
478
|
+
let!(:group2_1) { container.scoped_items.create(group: 2) }
|
479
|
+
let!(:group2_2) { container.scoped_items.create(group: 2) }
|
480
|
+
let!(:group2_3) { container.scoped_items.create(group: 2) }
|
481
|
+
let!(:group3_1) { container.scoped_items.create(group: 3) }
|
482
|
+
|
483
|
+
it "should default group1_1 to a :position of 1" do
|
484
|
+
group1_1.position.should eq 1
|
485
|
+
end
|
486
|
+
|
487
|
+
it "should default group1_2 to a :position of 2" do
|
488
|
+
group1_2.position.should eq 2
|
489
|
+
end
|
490
|
+
|
491
|
+
it "should default group2_1 to a :position of 1" do
|
492
|
+
group2_1.position.should eq 1
|
493
|
+
end
|
494
|
+
|
495
|
+
it "should default group2_2 to a :position of 2" do
|
496
|
+
group2_2.position.should eq 2
|
497
|
+
end
|
498
|
+
|
499
|
+
it "should default group2_3 to a :position of 3" do
|
500
|
+
group2_3.position.should eq 3
|
501
|
+
end
|
502
|
+
|
503
|
+
it "should default group3_1 to a :position of 1" do
|
504
|
+
group3_1.position.should eq 1
|
505
|
+
end
|
506
|
+
|
507
|
+
end
|
508
|
+
|
509
|
+
end
|
510
|
+
|
511
|
+
|
512
|
+
describe "#update :position" do
|
513
|
+
|
514
|
+
context "for Collection List" do
|
515
|
+
|
516
|
+
let!(:group1_1) { Scoped.create(group: 1) }
|
517
|
+
let!(:group1_2) { Scoped.create(group: 1) }
|
518
|
+
let!(:group2_1) { Scoped.create(group: 2) }
|
519
|
+
let!(:group2_2) { Scoped.create(group: 2) }
|
520
|
+
let!(:group2_3) { Scoped.create(group: 2) }
|
521
|
+
|
522
|
+
context "group1_2 to :position 1" do
|
523
|
+
|
524
|
+
before do
|
525
|
+
group1_2.update_attribute(:position, 1)
|
526
|
+
end
|
527
|
+
|
528
|
+
it "should have updated group1_1 to :position of 2" do
|
529
|
+
group1_1.position.should eq 1
|
530
|
+
group1_1.reload.position.should eq 2
|
531
|
+
end
|
532
|
+
|
533
|
+
it "should not have updated :group2_1's :position" do
|
534
|
+
group2_1.reload.position.should eq group2_1.position
|
535
|
+
end
|
536
|
+
|
537
|
+
it "should not have updated :group2_2's :position" do
|
538
|
+
group2_2.reload.position.should eq group2_2.position
|
539
|
+
end
|
540
|
+
|
541
|
+
it "should not have updated :group2_3's :position" do
|
542
|
+
group2_3.reload.position.should eq group2_3.position
|
543
|
+
end
|
544
|
+
|
545
|
+
end
|
546
|
+
|
547
|
+
context "group2_2 to :position 3" do
|
548
|
+
|
549
|
+
before do
|
550
|
+
group2_2.update_attribute(:position, 3)
|
551
|
+
end
|
552
|
+
|
553
|
+
it "should not have updated group1_1's :position" do
|
554
|
+
group1_1.reload.position.should eq group1_1.position
|
555
|
+
end
|
556
|
+
|
557
|
+
it "should not have updated group1_2's :position" do
|
558
|
+
group1_2.reload.position.should eq group1_2.position
|
559
|
+
end
|
560
|
+
|
561
|
+
it "should not have updated group2_1's :position" do
|
562
|
+
group2_1.reload.position.should eq group2_1.position
|
563
|
+
end
|
564
|
+
|
565
|
+
it "should have updated group2_2's :position to 3" do
|
566
|
+
group2_2.position.should eq 3
|
567
|
+
end
|
568
|
+
|
569
|
+
it "should have updated group2_3's :position to 2" do
|
570
|
+
group2_3.position.should eq 3
|
571
|
+
group2_3.reload.position.should eq 2
|
572
|
+
end
|
573
|
+
|
574
|
+
end
|
575
|
+
|
576
|
+
end
|
577
|
+
|
578
|
+
context "for an Embedded List" do
|
579
|
+
|
580
|
+
let!(:container) { Container.create }
|
581
|
+
let!(:group1_1) { container.scoped_items.create(group: 1) }
|
582
|
+
let!(:group1_2) { container.scoped_items.create(group: 1) }
|
583
|
+
let!(:group2_1) { container.scoped_items.create(group: 2) }
|
584
|
+
let!(:group2_2) { container.scoped_items.create(group: 2) }
|
585
|
+
let!(:group2_3) { container.scoped_items.create(group: 2) }
|
586
|
+
|
587
|
+
context "moving group1_1 to :position 2" do
|
588
|
+
|
589
|
+
before do
|
590
|
+
group1_1.update_attributes(position: 2)
|
591
|
+
end
|
592
|
+
|
593
|
+
it "should update group1_1's :position to 2" do
|
594
|
+
group1_1.position.should eq 2
|
595
|
+
end
|
596
|
+
|
597
|
+
it "should update group1_2's :position to 1" do
|
598
|
+
group1_2.position.should eq 2
|
599
|
+
group1_2.reload.position.should eq 1
|
600
|
+
end
|
601
|
+
|
602
|
+
it "should not update group2_1's :position" do
|
603
|
+
group2_1.position.should eq 1
|
604
|
+
group2_1.reload.position.should eq 1
|
605
|
+
end
|
606
|
+
|
607
|
+
it "should not update group2_2's :position" do
|
608
|
+
group2_2.position.should eq 2
|
609
|
+
group2_2.reload.position.should eq 2
|
610
|
+
end
|
611
|
+
|
612
|
+
it "should not update group2_3's :position" do
|
613
|
+
group2_3.position.should eq 3
|
614
|
+
group2_3.reload.position.should eq 3
|
615
|
+
end
|
616
|
+
|
617
|
+
end
|
618
|
+
|
619
|
+
context "moving group2_3 to :position 1" do
|
620
|
+
|
621
|
+
before do
|
622
|
+
group2_3.update_attributes(position: 1)
|
623
|
+
end
|
624
|
+
|
625
|
+
it "should not update group1_1's :position" do
|
626
|
+
group1_1.position.should eq 1
|
627
|
+
group1_1.reload.position.should eq 1
|
628
|
+
end
|
629
|
+
|
630
|
+
it "should not update group1_2's :position" do
|
631
|
+
group1_2.position.should eq 2
|
632
|
+
group1_2.reload.position.should eq 2
|
633
|
+
end
|
634
|
+
|
635
|
+
it "should update group2_1's :position to 2" do
|
636
|
+
group2_1.position.should eq 1
|
637
|
+
group2_1.reload.position.should eq 2
|
638
|
+
end
|
639
|
+
|
640
|
+
it "should update group2_2's :position to 3" do
|
641
|
+
group2_2.position.should eq 2
|
642
|
+
group2_2.reload.position.should eq 3
|
643
|
+
end
|
644
|
+
|
645
|
+
it "should update group2_3's :position to 1" do
|
646
|
+
group2_3.position.should eq 1
|
647
|
+
group2_3.reload.position.should eq 1
|
648
|
+
end
|
649
|
+
|
650
|
+
end
|
651
|
+
|
652
|
+
end
|
653
|
+
|
654
|
+
end
|
655
|
+
|
656
|
+
|
657
|
+
describe "#destroy" do
|
658
|
+
|
659
|
+
context "from a Collection" do
|
660
|
+
|
661
|
+
let!(:group1_1) { Scoped.create(group: 1) }
|
662
|
+
let!(:group1_2) { Scoped.create(group: 1) }
|
663
|
+
let!(:group2_1) { Scoped.create(group: 2) }
|
664
|
+
let!(:group2_2) { Scoped.create(group: 2) }
|
665
|
+
let!(:group2_3) { Scoped.create(group: 2) }
|
666
|
+
|
667
|
+
context "for group2_1" do
|
668
|
+
|
669
|
+
before do
|
670
|
+
group2_1.destroy
|
671
|
+
end
|
672
|
+
|
673
|
+
it "should not update group1_1's :position" do
|
674
|
+
group1_1.position.should eq 1
|
675
|
+
group1_1.reload.position.should eq 1
|
676
|
+
end
|
677
|
+
|
678
|
+
it "should not update group1_2's :position" do
|
679
|
+
group1_2.position.should eq 2
|
680
|
+
group1_2.reload.position.should eq 2
|
681
|
+
end
|
682
|
+
|
683
|
+
it "should update group2_2's :position to 1" do
|
684
|
+
group2_2.position.should eq 2
|
685
|
+
group2_2.reload.position.should eq 1
|
686
|
+
end
|
687
|
+
|
688
|
+
it "should update group2_3's :position to 2" do
|
689
|
+
group2_3.position.should eq 3
|
690
|
+
group2_3.reload.position.should eq 2
|
691
|
+
end
|
692
|
+
|
693
|
+
end
|
694
|
+
|
695
|
+
end
|
696
|
+
|
697
|
+
context "from an Embedded Collection" do
|
698
|
+
|
699
|
+
let!(:container) { Container.create }
|
700
|
+
let!(:group1_1) { container.scoped_items.create(group: 1) }
|
701
|
+
let!(:group1_2) { container.scoped_items.create(group: 1) }
|
702
|
+
let!(:group2_1) { container.scoped_items.create(group: 2) }
|
703
|
+
let!(:group2_2) { container.scoped_items.create(group: 2) }
|
704
|
+
let!(:group2_3) { container.scoped_items.create(group: 2) }
|
705
|
+
|
706
|
+
context "for group2_2" do
|
707
|
+
|
708
|
+
before do
|
709
|
+
group2_2.destroy
|
710
|
+
end
|
711
|
+
|
712
|
+
it "should not update group1_1's :position" do
|
713
|
+
group1_1.position.should eq 1
|
714
|
+
group1_1.reload.position.should eq 1
|
715
|
+
end
|
716
|
+
|
717
|
+
it "should not update group1_2's :position" do
|
718
|
+
group1_2.position.should eq 2
|
719
|
+
group1_2.reload.position.should eq 2
|
720
|
+
end
|
721
|
+
|
722
|
+
it "should not update group2_1's :position" do
|
723
|
+
group2_1.position.should eq 1
|
724
|
+
group2_1.reload.position.should eq 1
|
725
|
+
end
|
726
|
+
|
727
|
+
it "should update group2_3's :position to 2" do
|
728
|
+
group2_3.position.should eq 3
|
729
|
+
container.reload.scoped_items.find(group2_3.id).position.should eq 2
|
730
|
+
end
|
731
|
+
|
732
|
+
end
|
733
|
+
|
734
|
+
end
|
735
|
+
|
736
|
+
end
|
737
|
+
|
738
|
+
|
739
|
+
describe "#update_positions_in_list!" do
|
740
|
+
|
741
|
+
context "on a Collection" do
|
742
|
+
|
743
|
+
let!(:obj1) { Simple.create }
|
744
|
+
let!(:obj2) { Simple.create }
|
745
|
+
let!(:obj3) { Simple.create }
|
746
|
+
|
747
|
+
before do
|
748
|
+
Simple.update_positions_in_list!([obj2.id, obj1.id, obj3.id])
|
749
|
+
end
|
750
|
+
|
751
|
+
it "should change obj1 from :position of 1 to 2" do
|
752
|
+
obj1.position.should eq 1
|
753
|
+
obj1.reload.position.should eq 2
|
754
|
+
end
|
755
|
+
|
756
|
+
it "should change obj2 from :position of 2 to 1" do
|
757
|
+
obj2.position.should eq 2
|
758
|
+
obj2.reload.position.should eq 1
|
759
|
+
end
|
760
|
+
|
761
|
+
it "should not change obj3 from :position of 3" do
|
762
|
+
obj3.position.should eq 3
|
763
|
+
obj3.reload.position.should eq 3
|
764
|
+
end
|
765
|
+
|
766
|
+
end
|
767
|
+
|
768
|
+
context "on an Embedded Collection" do
|
769
|
+
|
770
|
+
let(:container) { Container.create! }
|
771
|
+
let!(:obj1) { container.items.create! }
|
772
|
+
let!(:obj2) { container.items.create! }
|
773
|
+
let!(:obj3) { container.items.create! }
|
774
|
+
let!(:obj4) { container.items.create! }
|
775
|
+
|
776
|
+
before do
|
777
|
+
container.items.update_positions_in_list!([obj2.id, obj1.id, obj4.id, obj3.id])
|
778
|
+
end
|
779
|
+
|
780
|
+
it "should change obj1 from :position of 1 to 2" do
|
781
|
+
obj1.position.should eq 1
|
782
|
+
obj1.reload.position.should eq 2
|
783
|
+
end
|
784
|
+
|
785
|
+
it "should change obj2 from :position of 2 to 1" do
|
786
|
+
obj2.position.should eq 2
|
787
|
+
obj2.reload.position.should eq 1
|
788
|
+
end
|
789
|
+
|
790
|
+
it "should change obj3 from :position of 3 to 4" do
|
791
|
+
obj3.position.should eq 3
|
792
|
+
obj3.reload.position.should eq 4
|
793
|
+
end
|
794
|
+
|
795
|
+
it "should change obj4 from :position of 4 to 3" do
|
796
|
+
obj4.position.should eq 4
|
797
|
+
obj4.reload.position.should eq 3
|
798
|
+
end
|
799
|
+
end
|
800
|
+
|
801
|
+
context "on a Deeply Embedded Collection" do
|
802
|
+
|
803
|
+
let(:root) do
|
804
|
+
Container.create!
|
805
|
+
end
|
806
|
+
|
807
|
+
let(:embedded) do
|
808
|
+
root.items.create!
|
809
|
+
end
|
810
|
+
|
811
|
+
let!(:obj1) { embedded.items.create! }
|
812
|
+
let!(:obj2) { embedded.items.create! }
|
813
|
+
let!(:obj3) { embedded.items.create! }
|
814
|
+
let!(:obj4) { embedded.items.create! }
|
815
|
+
|
816
|
+
before do
|
817
|
+
embedded.items.update_positions_in_list!([obj3.id, obj4.id, obj1.id, obj2.id])
|
818
|
+
end
|
819
|
+
|
820
|
+
it "should change obj1 from :position of 1 to 3" do
|
821
|
+
obj1.position.should eq 1
|
822
|
+
obj1.reload.position.should eq 3
|
823
|
+
end
|
824
|
+
|
825
|
+
it "should change @obj2 from :position of 2 to 4" do
|
826
|
+
obj2.position.should eq 2
|
827
|
+
obj2.reload.position.should eq 4
|
828
|
+
end
|
829
|
+
|
830
|
+
it "should change @obj3 from :position of 3 to 1" do
|
831
|
+
obj3.position.should eq 3
|
832
|
+
obj3.reload.position.should eq 1
|
833
|
+
end
|
834
|
+
|
835
|
+
it "should change @obj4 from :position of 4 to 2" do
|
836
|
+
obj4.position.should eq 4
|
837
|
+
obj4.reload.position.should eq 2
|
838
|
+
end
|
839
|
+
|
840
|
+
end
|
841
|
+
|
842
|
+
end
|
843
|
+
|
844
|
+
end
|