active_mocker 1.2.4 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,8 +19,6 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
19
19
  Micropost.destroy_all
20
20
  end
21
21
 
22
- USER_CLASSES = [User, UserMock]
23
-
24
22
 
25
23
  let(:attributes) { {name: 'Dustin Zeisler', email: 'dustin@example.com'} }
26
24
  let(:attributes_with_admin) { {name: 'Dustin Zeisler', email: 'dustin@example.com', admin: true} }
@@ -46,6 +44,52 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
46
44
  UserMock.create(create_attributes)
47
45
  end
48
46
 
47
+ context 'new with block' do
48
+
49
+ def create_with_block(klass)
50
+ user = klass.new do |u|
51
+ u.name = "David"
52
+ u.admin = true
53
+ end
54
+
55
+ expect(user.name).to eq 'David'
56
+ expect(user.admin).to eq true
57
+
58
+ end
59
+
60
+ it 'User' do
61
+ create_with_block(User)
62
+ end
63
+
64
+ it 'UserMock' do
65
+ create_with_block(UserMock)
66
+ end
67
+
68
+ end
69
+
70
+ context 'create with block' do
71
+
72
+ def create_with_block(klass)
73
+ user = klass.create do |u|
74
+ u.name = "David"
75
+ u.admin = true
76
+ end
77
+
78
+ expect(user.name).to eq 'David'
79
+ expect(user.admin).to eq true
80
+
81
+ end
82
+
83
+ it 'User' do
84
+ create_with_block(User)
85
+ end
86
+
87
+ it 'UserMock' do
88
+ create_with_block(UserMock)
89
+ end
90
+
91
+ end
92
+
49
93
  end
50
94
 
51
95
  describe '#attributes' do
@@ -63,6 +107,74 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
63
107
 
64
108
  end
65
109
 
110
+ describe '::all' do
111
+
112
+ def klass_all(klass)
113
+ array = [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
114
+ expect(klass.all).to eq array
115
+ end
116
+
117
+ it 'User' do
118
+ klass_all(User)
119
+ end
120
+
121
+ it 'UserMock' do
122
+ klass_all(UserMock)
123
+ end
124
+
125
+ end
126
+
127
+ describe '::average' do
128
+
129
+ def klass_method_average(klass)
130
+ [klass.create!(credits: 12, email: '1'), klass.create!(credits: 2, email: '2'), klass.create!(credits: 8, email: '3'), klass.create!(credits: 4, email: '4')]
131
+ expect(klass.average(:credits).to_s).to eq "6.5"
132
+ end
133
+
134
+ it 'User' do
135
+ klass_method_average(User)
136
+ end
137
+
138
+ it 'UserMock' do
139
+ klass_method_average(UserMock)
140
+ end
141
+
142
+ end
143
+
144
+ describe '::minimum' do
145
+
146
+ def klass_method_minimum(klass)
147
+ [klass.create!(credits: 12, email: '1'), klass.create!(credits: 2, email: '2'), klass.create!(credits: 8, email: '3'), klass.create!(credits: 4, email: '4')]
148
+ expect(klass.minimum(:credits).to_s).to eq "2.0"
149
+ end
150
+
151
+ it 'User' do
152
+ klass_method_minimum(User)
153
+ end
154
+
155
+ it 'UserMock' do
156
+ klass_method_minimum(UserMock)
157
+ end
158
+
159
+ end
160
+
161
+ describe '::maximum' do
162
+
163
+ def klass_method_maximum(klass)
164
+ [klass.create!(credits: 12, email: '1'), klass.create!(credits: 2, email: '2'), klass.create!(credits: 8, email: '3'), klass.create!(credits: 4, email: '4')]
165
+ expect(klass.maximum(:credits).to_s).to eq "12.0"
166
+ end
167
+
168
+ it 'User' do
169
+ klass_method_maximum(User)
170
+ end
171
+
172
+ it 'UserMock' do
173
+ klass_method_maximum(UserMock)
174
+ end
175
+
176
+ end
177
+
66
178
  describe 'associations' do
67
179
 
68
180
  let(:micropost){ Micropost.create(content: 'post')}
@@ -91,6 +203,14 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
91
203
 
92
204
  end
93
205
 
206
+ describe 'attribute_names' do
207
+
208
+ it 'they are the same' do
209
+ expect(UserMock.attribute_names).to eq User.attribute_names
210
+ end
211
+
212
+ end
213
+
94
214
  describe '::find_by' do
95
215
 
96
216
  let!(:ar_record){User.create(attributes)}
@@ -108,16 +228,16 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
108
228
 
109
229
  describe '::where' do
110
230
 
111
- let(:ar_record){User.create(attributes)}
112
- let(:mock_record){UserMock.create(attributes)}
113
- let(:mock_record_2){UserMock.create(attributes_with_admin)}
231
+ let!(:ar_record){User.create(attributes)}
232
+ let!(:mock_record){UserMock.create(attributes)}
233
+ let!(:mock_record_2){UserMock.create(attributes_with_admin)}
114
234
 
115
235
  it 'AR' do
116
236
  expect([ar_record]).to eq User.where(attributes)
117
237
  end
118
238
 
119
239
  it 'Mock' do
120
- expect([mock_record]).to eq UserMock.where(attributes)
240
+ expect(UserMock.where(attributes)).to eq [mock_record, mock_record_2]
121
241
  end
122
242
 
123
243
  it 'Mock will not take sql string needs to be mocked' do
@@ -125,6 +245,94 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
125
245
  expect{UserMock.where("name = 'Dustin Zeisler'")}.to raise_error
126
246
  end
127
247
 
248
+ context 'by association not only attribute'do
249
+
250
+ def where_by_association(user_class, micropost_class)
251
+ user = user_class.create!(email: '1')
252
+ micropost = micropost_class.create(user: user)
253
+ expect(micropost_class.where(user: user)).to eq [micropost]
254
+ end
255
+
256
+ it 'User' do
257
+ where_by_association(User, Micropost)
258
+ end
259
+
260
+ it 'UserMock' do
261
+ where_by_association(UserMock, MicropostMock)
262
+ end
263
+
264
+
265
+ end
266
+
267
+ context 'will return all if no options passed' do
268
+
269
+ def where_no_options(klass, where_klass)
270
+ records = [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
271
+ expect(klass.where.class).to eq(where_klass)
272
+ end
273
+
274
+ it 'User' do
275
+ where_no_options(User, ActiveRecord::QueryMethods::WhereChain)
276
+ end
277
+
278
+ it 'UserMock' do
279
+ where_no_options(UserMock, ActiveMocker::Collection::Queries::WhereNotChain)
280
+ end
281
+
282
+ end
283
+
284
+ context 'multiple wheres' do
285
+
286
+ def where_where(klass)
287
+ records = [klass.create!(email: '1', name: 'fred', admin: true), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
288
+ expect(klass.where(name: 'fred').where(admin: true)).to eq([records[0]])
289
+ end
290
+
291
+ it 'User' do
292
+ where_where(User)
293
+ end
294
+
295
+ it 'UserMock' do
296
+ where_where(UserMock)
297
+ end
298
+
299
+ end
300
+
301
+ end
302
+
303
+ describe '::where.not' do
304
+
305
+ def where_not(klass)
306
+ records = [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
307
+ expect(klass.where.not(name: 'fred')).to eq([records[2]])
308
+ end
309
+
310
+ it 'User' do
311
+ where_not(User)
312
+ end
313
+
314
+ it 'UserMock' do
315
+ where_not(UserMock)
316
+ end
317
+
318
+ end
319
+
320
+ describe '::update_all' do
321
+
322
+ def klass_update_all(klass)
323
+ [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
324
+ klass.update_all(name: 'John')
325
+ expect(klass.all.map{|a| a.name}).to eq(['John', 'John', 'John'])
326
+ end
327
+
328
+ it 'User' do
329
+ klass_update_all(User)
330
+ end
331
+
332
+ it 'UserMock' do
333
+ klass_update_all(UserMock)
334
+ end
335
+
128
336
  end
129
337
 
130
338
  describe 'type coercion' do
@@ -160,33 +368,246 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
160
368
 
161
369
  let(:support_array_methods) { [:<<, :take, :push, :clear, :first, :last, :concat, :replace, :distinct, :uniq, :count, :size, :length, :empty?, :any?, :include?] }
162
370
 
163
- it 'supported array methods' do
164
- mp1 = Micropost.create!(content: 'text')
165
- mp2 = Micropost.create!(content: 'text')
166
- user = User.create(microposts: [mp1, mp2])
371
+ context 'supported array methods' do
372
+
373
+ def supported_array_methods(user_class, micropost, collection_klass)
374
+ mp1 = micropost.create!(content: 'text')
375
+ mp2 = micropost.create!(content: 'text')
376
+ user = user_class.create(microposts: [mp1, mp2])
377
+ expect(user.microposts.take(1).count).to eq(1)
378
+ expect(user.microposts.class).to eq(collection_klass)
379
+ expect(user.microposts.methods).to include *support_array_methods
380
+ end
381
+
382
+ it 'User' do
383
+ supported_array_methods(User, Micropost, Micropost::ActiveRecord_Associations_CollectionProxy)
384
+ end
385
+
386
+ it 'UserMock' do
387
+ supported_array_methods(UserMock, MicropostMock, ActiveMocker::Collection::Association)
388
+ end
389
+
390
+ end
391
+
392
+ describe '#find' do
393
+
394
+ context 'single id passed' do
395
+
396
+ def collection_find(user_class, micropost, collection_klass)
397
+ microposts = [micropost.create, micropost.create]
398
+ user = user_class.create!(email: '1', name: 'fred', microposts: microposts)
399
+ expect(user.microposts.find(microposts.first.id)).to eq microposts.first
400
+ end
401
+
402
+ it 'User' do
403
+ collection_find(User, Micropost, Micropost::ActiveRecord_Associations_CollectionProxy)
404
+ end
405
+
406
+ it 'UserMock' do
407
+ collection_find(UserMock, MicropostMock, ActiveMocker::Collection::Association)
408
+ end
167
409
 
168
- mpm1 = MicropostMock.create
169
- mpm2 = MicropostMock.create
170
- user_mock = UserMock.create(microposts: [mpm1, mpm2])
410
+ end
171
411
 
172
- expect(user.microposts.methods).to include *support_array_methods
173
- expect(user_mock.microposts.methods).to include *support_array_methods
174
- expect(user.microposts.take(1).count).to eq(1)
175
- expect(user_mock.microposts.take(1).count).to eq(1)
412
+ context 'multiple ids passed' do
413
+
414
+ def collection_finds(user_class, micropost, collection_klass)
415
+ microposts = [micropost.create(id: 1), micropost.create(id: 2)]
416
+ user = user_class.create!(email: '1', name: 'fred', microposts: microposts)
417
+ expect(user.microposts.find([microposts.first.id, microposts.last.id])).to include *microposts.first, microposts.last
418
+ end
419
+
420
+ it 'User' do
421
+ collection_finds(User, Micropost, Micropost::ActiveRecord_Associations_CollectionProxy)
422
+ end
423
+
424
+ it 'UserMock' do
425
+ collection_finds(UserMock, MicropostMock, ActiveMocker::Collection::Association)
426
+ end
427
+
428
+ end
176
429
 
177
430
  end
178
431
 
179
- it '#sum' do
180
- mp1 = Micropost.create!(content: 'text')
181
- mp2 = Micropost.create!(content: 'text')
182
- user = User.create(microposts: [mp1, mp2])
183
- expect(user.microposts.sum(:user_id)).to eq 2
432
+ describe '#sum' do
433
+
434
+ def collection_association_sum(user_class, micropost)
435
+ mpm1 = micropost.create!(up_votes: 5)
436
+ mpm2 = micropost.create!(up_votes: 5)
437
+ user_mock = user_class.create!(microposts: [mpm1, mpm2])
438
+ expect(user_mock.microposts.sum(:up_votes)).to eq 10
439
+ end
184
440
 
185
- mpm1 = MicropostMock.create(user_id: 1)
186
- mpm2 = MicropostMock.create(user_id: 2)
187
- user_mock = UserMock.create(microposts: [mpm1, mpm2])
441
+ it 'User' do
442
+ collection_association_sum(User, Micropost)
443
+ end
188
444
 
189
- expect(user_mock.microposts.sum(:user_id)).to eq 3
445
+ it 'UserMock' do
446
+ collection_association_sum(UserMock, MicropostMock)
447
+ end
448
+
449
+ end
450
+
451
+ context 'can delete unsaved object from collection' do
452
+
453
+ def delete_object(klasses)
454
+ mp1 = klasses.first.create!(content: 'text')
455
+ mp2 = klasses.first.create!(content: 'text')
456
+ user = klasses.last.new(microposts: [mp1, mp2])
457
+ user.microposts.delete(mp1)
458
+ expect(user.microposts).to eq [mp2]
459
+ end
460
+
461
+ it 'UserMock' do
462
+ delete_object([MicropostMock, UserMock])
463
+ end
464
+
465
+ it 'User' do
466
+ delete_object([Micropost, User])
467
+ end
468
+
469
+ end
470
+
471
+ end
472
+
473
+ describe 'Collections'do
474
+
475
+ context 'delete_all' do
476
+
477
+ context 'deletes all records from result' do
478
+
479
+ def collections_delete_all(klass)
480
+ [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
481
+ klass.where(name: 'fred').delete_all
482
+ expect(klass.count).to eq 1
483
+ end
484
+
485
+ it 'User' do
486
+ collections_delete_all(User)
487
+ end
488
+
489
+ it 'UserMock' do
490
+ collections_delete_all(UserMock)
491
+ end
492
+
493
+ end
494
+
495
+ context 'deletes all records association' do
496
+
497
+ def association_collections_delete_all(user_class, micropost)
498
+ user = user_class.create!(email: '1', name: 'fred', microposts: [micropost.create, micropost.create])
499
+ user.microposts.delete_all
500
+ expect(user_class.count).to eq 1
501
+ end
502
+
503
+ it 'User' do
504
+ association_collections_delete_all(User, Micropost)
505
+ end
506
+
507
+ it 'UserMock' do
508
+ association_collections_delete_all(UserMock, MicropostMock)
509
+ end
510
+
511
+ end
512
+
513
+ end
514
+
515
+ context 'where' do
516
+
517
+ context 'all.where' do
518
+
519
+ def collections_all_where(klass)
520
+ records = [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
521
+ expect(klass.all.where(name: 'fred')).to eq([records[0], records[1]])
522
+ end
523
+
524
+ it 'User' do
525
+ collections_all_where(User)
526
+ end
527
+
528
+ it 'UserMock' do
529
+ collections_all_where(UserMock)
530
+ end
531
+
532
+ end
533
+
534
+ end
535
+
536
+ context 'order' do
537
+
538
+ context 'where.order' do
539
+
540
+ def collections_where_order(klass)
541
+ records = [klass.create!(email: '2', name: 'fred'), klass.create!(email: '1', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
542
+ expect(klass.where(name: 'fred').order(:email)).to eq([records[1], records[0]])
543
+ end
544
+
545
+ it 'User' do
546
+ collections_where_order(User)
547
+ end
548
+
549
+ it 'UserMock' do
550
+ collections_where_order(UserMock)
551
+ end
552
+
553
+ end
554
+
555
+ context 'where.order.reverse_order' do
556
+
557
+ def collections_where_order_reverse_order(klass)
558
+ records = [klass.create!(email: '2', name: 'fred'), klass.create!(email: '1', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
559
+ expect(klass.where(name: 'fred').order(:email).reverse_order).to eq([records[0], records[1]])
560
+ end
561
+
562
+ it 'User' do
563
+ collections_where_order_reverse_order(User)
564
+ end
565
+
566
+ it 'UserMock' do
567
+ collections_where_order_reverse_order(UserMock)
568
+ end
569
+
570
+ end
571
+
572
+ end
573
+
574
+ context 'update_all' do
575
+
576
+ context 'where.update_all' do
577
+
578
+ def collection_where_update_all(klass)
579
+ [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
580
+ klass.where(name: 'fred' ).update_all(name: 'John')
581
+ expect(klass.all.map { |a| a.name }).to eq(['John', 'John', 'Sam'])
582
+ end
583
+
584
+ it 'User' do
585
+ collection_where_update_all(User)
586
+ end
587
+
588
+ it 'UserMock' do
589
+ collection_where_update_all(UserMock)
590
+ end
591
+
592
+ end
593
+
594
+ context 'all.update_all' do
595
+
596
+ def collection_all_update_all(klass)
597
+ [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'fred'), klass.create!(email: '3', name: 'Sam')]
598
+ klass.all.update_all(name: 'John')
599
+ expect(klass.all.map { |a| a.name }).to eq(['John', 'John', 'John'])
600
+ end
601
+
602
+ it 'User' do
603
+ collection_all_update_all(User)
604
+ end
605
+
606
+ it 'UserMock' do
607
+ collection_all_update_all(UserMock)
608
+ end
609
+
610
+ end
190
611
 
191
612
  end
192
613
 
@@ -240,7 +661,6 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
240
661
 
241
662
  end
242
663
 
243
-
244
664
  end
245
665
 
246
666
  describe 'delete' do
@@ -355,23 +775,57 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
355
775
 
356
776
  end
357
777
 
358
- describe '::where(conditions = nil).delete_all', pending: true do
359
- it "User" do
360
- pending{ 'new feature implement ActiveMocker::Relation array' }
361
- user2 = User.create(email: '1')
362
- user1 = User.create(email: '2')
363
- expect(User.where(id: user1.id).delete_all).to eq 1
364
- expect(User.where(id: user1.id).class).to eq User::ActiveRecord_Relation
365
- expect(User.count).to eq 1
778
+ describe '::limit' do
779
+
780
+ def klass_limit(klass)
781
+ records = [klass.create!(email: '1', name: 'fred'), klass.create!(email: '2', name: 'Dan'), klass.create!(email: '3', name: 'Sam')]
782
+ expect(klass.limit(2)).to eq [records[0], records[1]]
783
+ expect(klass.limit(2).where(name: 'fred')).to eq [records[0]]
366
784
  end
367
785
 
368
- it "UserMock" do
369
- pending { 'new feature implement ActiveMocker::Relation array' }
370
- user2 = UserMock.create(email: '1')
371
- user1 = UserMock.create(email: '2')
372
- expect(UserMock.where(id: user1.id).class.name).to eq 'ActiveMocker::Relation'
373
- expect(UserMock.where(id: user1.id).delete_all).to eq 1
374
- expect(UserMock.count).to eq 1
786
+ it 'User' do
787
+ klass_limit(User)
788
+ end
789
+
790
+ it 'UserMock' do
791
+ klass_limit(UserMock)
792
+ end
793
+
794
+ end
795
+
796
+ describe '::find_by!' do
797
+
798
+ context 'will raise exception if not found' do
799
+
800
+ def find_by_exception(user_class, error)
801
+ expect{user_class.find_by!(name: 'Matz')}.to raise_error(error)
802
+ end
803
+
804
+ it 'User' do
805
+ find_by_exception(User, ActiveRecord::RecordNotFound)
806
+ end
807
+
808
+ it 'UserMock' do
809
+ find_by_exception(UserMock, ActiveMocker::RecordNotFound)
810
+ end
811
+
812
+ end
813
+
814
+ context 'will find one record by conditions' do
815
+
816
+ def find_by_one_result(user_class)
817
+ user = user_class.create!(email: '1', name: 'fred')
818
+ expect(user_class.find_by!(name: 'fred') ).to eq user
819
+ end
820
+
821
+ it 'User' do
822
+ find_by_one_result(User)
823
+ end
824
+
825
+ it 'UserMock' do
826
+ find_by_one_result(UserMock)
827
+ end
828
+
375
829
  end
376
830
 
377
831
  end