active_mocker 1.2.4 → 1.3

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.
@@ -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