jsonapi-resources 0.0.4 → 0.0.5

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.
@@ -5,21 +5,25 @@ class PostsControllerTest < ActionController::TestCase
5
5
  def test_index
6
6
  get :index
7
7
  assert_response :success
8
+ assert json_response['posts'].is_a?(Array)
8
9
  end
9
10
 
10
11
  def test_index_filter_by_id
11
12
  get :index, {id: '1'}
12
13
  assert_response :success
14
+ assert json_response['posts'].is_a?(Array)
13
15
  end
14
16
 
15
17
  def test_index_filter_by_title
16
18
  get :index, {title: 'New post'}
17
19
  assert_response :success
20
+ assert json_response['posts'].is_a?(Array)
18
21
  end
19
22
 
20
23
  def test_index_filter_by_ids
21
24
  get :index, {ids: '1,2'}
22
25
  assert_response :success
26
+ assert json_response['posts'].is_a?(Array)
23
27
  assert_equal 2, json_response['posts'].size
24
28
  end
25
29
 
@@ -162,22 +166,22 @@ class PostsControllerTest < ActionController::TestCase
162
166
  def test_show_single
163
167
  get :show, {id: '1'}
164
168
  assert_response :success
165
- assert_equal 1, json_response['posts'].size
166
- assert_equal 'New post', json_response['posts'][0]['title']
167
- assert_equal 'A body!!!', json_response['posts'][0]['body']
168
- assert_equal [1,2,3], json_response['posts'][0]['links']['tags']
169
- assert_equal [1,2], json_response['posts'][0]['links']['comments']
169
+ assert json_response['posts'].is_a?(Hash)
170
+ assert_equal 'New post', json_response['posts']['title']
171
+ assert_equal 'A body!!!', json_response['posts']['body']
172
+ assert_equal [1, 2, 3], json_response['posts']['links']['tags']
173
+ assert_equal [1, 2], json_response['posts']['links']['comments']
170
174
  assert_nil json_response['linked']
171
175
  end
172
176
 
173
177
  def test_show_single_with_includes
174
178
  get :show, {id: '1', include: 'comments'}
175
179
  assert_response :success
176
- assert_equal 1, json_response['posts'].size
177
- assert_equal 'New post', json_response['posts'][0]['title']
178
- assert_equal 'A body!!!', json_response['posts'][0]['body']
179
- assert_equal [1,2,3], json_response['posts'][0]['links']['tags']
180
- assert_equal [1,2], json_response['posts'][0]['links']['comments']
180
+ assert json_response['posts'].is_a?(Hash)
181
+ assert_equal 'New post', json_response['posts']['title']
182
+ assert_equal 'A body!!!', json_response['posts']['body']
183
+ assert_equal [1, 2, 3], json_response['posts']['links']['tags']
184
+ assert_equal [1, 2], json_response['posts']['links']['comments']
181
185
  assert_equal 2, json_response['linked']['comments'].size
182
186
  assert_nil json_response['linked']['tags']
183
187
  end
@@ -185,10 +189,10 @@ class PostsControllerTest < ActionController::TestCase
185
189
  def test_show_single_with_fields
186
190
  get :show, {id: '1', fields: 'author'}
187
191
  assert_response :success
188
- assert_equal 1, json_response['posts'].size
189
- assert_nil json_response['posts'][0]['title']
190
- assert_nil json_response['posts'][0]['body']
191
- assert_equal 1, json_response['posts'][0]['links']['author']
192
+ assert json_response['posts'].is_a?(Hash)
193
+ assert_nil json_response['posts']['title']
194
+ assert_nil json_response['posts']['body']
195
+ assert_equal 1, json_response['posts']['links']['author']
192
196
  end
193
197
 
194
198
  def test_show_single_invalid_id_format
@@ -216,31 +220,35 @@ class PostsControllerTest < ActionController::TestCase
216
220
  end
217
221
 
218
222
  def test_create_simple
219
- post :create, { posts: {
220
- title: 'JR is Great',
221
- body: 'JSONAPIResources is the greatest thing since unsliced bread.',
222
- links: {
223
- author: 3
224
- }
225
- }
226
- }
223
+ post :create,
224
+ {
225
+ posts: {
226
+ title: 'JR is Great',
227
+ body: 'JSONAPIResources is the greatest thing since unsliced bread.',
228
+ links: {
229
+ author: 3
230
+ }
231
+ }
232
+ }
227
233
 
228
234
  assert_response :created
229
- assert_equal 1, json_response['posts'].size
230
- assert_equal 3, json_response['posts'][0]['links']['author']
231
- assert_equal 'JR is Great', json_response['posts'][0]['title']
232
- assert_equal 'JSONAPIResources is the greatest thing since unsliced bread.', json_response['posts'][0]['body']
235
+ assert json_response['posts'].is_a?(Hash)
236
+ assert_equal 3, json_response['posts']['links']['author']
237
+ assert_equal 'JR is Great', json_response['posts']['title']
238
+ assert_equal 'JSONAPIResources is the greatest thing since unsliced bread.', json_response['posts']['body']
233
239
  end
234
240
 
235
241
  def test_create_link_to_missing_object
236
- post :create, { posts: {
237
- title: 'JR is Great',
238
- body: 'JSONAPIResources is the greatest thing since unsliced bread.',
239
- links: {
240
- author: 304567
241
- }
242
- }
243
- }
242
+ post :create,
243
+ {
244
+ posts: {
245
+ title: 'JR is Great',
246
+ body: 'JSONAPIResources is the greatest thing since unsliced bread.',
247
+ links: {
248
+ author: 304567
249
+ }
250
+ }
251
+ }
244
252
 
245
253
  assert_response :bad_request
246
254
  # Todo: check if this validation is working
@@ -248,112 +256,150 @@ class PostsControllerTest < ActionController::TestCase
248
256
  end
249
257
 
250
258
  def test_create_extra_param
251
- post :create, { posts: {
252
- asdfg: 'aaaa',
253
- title: 'JR is Great',
254
- body: 'JSONAPIResources is the greatest thing since unsliced bread.',
255
- links: {
256
- author: 3
257
- }
258
- }
259
- }
259
+ post :create,
260
+ {
261
+ posts: {
262
+ asdfg: 'aaaa',
263
+ title: 'JR is Great',
264
+ body: 'JSONAPIResources is the greatest thing since unsliced bread.',
265
+ links: {
266
+ author: 3
267
+ }
268
+ }
269
+ }
260
270
 
261
271
  assert_response :bad_request
262
272
  assert_match /asdfg is not allowed/, response.body
263
273
  end
264
274
 
265
275
  def test_create_multiple
266
- post :create, { posts: [
267
- {
268
- title: 'JR is Great',
269
- body: 'JSONAPIResources is the greatest thing since unsliced bread.',
270
- links: {
271
- author: 3
272
- }
273
- },
274
- {
275
- title: 'Ember is Great',
276
- body: 'Ember is the greatest thing since unsliced bread.',
277
- links: {
278
- author: 3
279
- }
280
- }
281
- ]
282
- }
276
+ post :create,
277
+ {
278
+ posts: [
279
+ {
280
+ title: 'JR is Great',
281
+ body: 'JSONAPIResources is the greatest thing since unsliced bread.',
282
+ links: {
283
+ author: 3
284
+ }
285
+ },
286
+ {
287
+ title: 'Ember is Great',
288
+ body: 'Ember is the greatest thing since unsliced bread.',
289
+ links: {
290
+ author: 3
291
+ }
292
+ }
293
+ ]
294
+ }
283
295
 
284
296
  assert_response :created
297
+ assert json_response['posts'].is_a?(Array)
285
298
  assert_equal json_response['posts'].size, 2
286
299
  assert_equal json_response['posts'][0]['links']['author'], 3
287
300
  assert_match /JR is Great/, response.body
288
301
  assert_match /Ember is Great/, response.body
289
302
  end
290
303
 
304
+ def test_create_multiple_wrong_case
305
+ post :create,
306
+ {
307
+ posts: [
308
+ {
309
+ Title: 'JR is Great',
310
+ body: 'JSONAPIResources is the greatest thing since unsliced bread.',
311
+ links: {
312
+ author: 3
313
+ }
314
+ },
315
+ {
316
+ title: 'Ember is Great',
317
+ BODY: 'Ember is the greatest thing since unsliced bread.',
318
+ links: {
319
+ author: 3
320
+ }
321
+ }
322
+ ]
323
+ }
324
+
325
+ assert_response :bad_request
326
+ assert_match /Title/, json_response['errors'][0]['detail']
327
+ end
328
+
291
329
  def test_create_simple_missing_posts
292
- post :create, { posts_spelled_wrong: {
293
- title: 'JR is Great',
294
- body: 'JSONAPIResources is the greatest thing since unsliced bread.',
295
- links: {
296
- author: 3
297
- }
298
- }
299
- }
330
+ post :create,
331
+ {
332
+ posts_spelled_wrong: {
333
+ title: 'JR is Great',
334
+ body: 'JSONAPIResources is the greatest thing since unsliced bread.',
335
+ links: {
336
+ author: 3
337
+ }
338
+ }
339
+ }
300
340
 
301
341
  assert_response :bad_request
302
342
  assert_match /The required parameter, posts, is missing./, json_response['errors'][0]['detail']
303
343
  end
304
344
 
305
345
  def test_create_simple_unpermitted_attributes
306
- post :create, { posts: {
307
- subject: 'JR is Great',
308
- body: 'JSONAPIResources is the greatest thing since unsliced bread.',
309
- links: {
310
- author: 3
311
- }
312
- }
313
- }
346
+ post :create,
347
+ {
348
+ posts: {
349
+ subject: 'JR is Great',
350
+ body: 'JSONAPIResources is the greatest thing since unsliced bread.',
351
+ links: {
352
+ author: 3
353
+ }
354
+ }
355
+ }
314
356
 
315
357
  assert_response :bad_request
316
358
  assert_match /subject/, json_response['errors'][0]['detail']
317
359
  end
318
360
 
319
361
  def test_create_with_links
320
- post :create, { posts: {
321
- title: 'JR is Great',
322
- body: 'JSONAPIResources is the greatest thing since unsliced bread.',
323
- links: {
324
- author: 3,
325
- tags: [3,4]
326
- }
327
- }
328
- }
362
+ post :create,
363
+ {
364
+ posts: {
365
+ title: 'JR is Great',
366
+ body: 'JSONAPIResources is the greatest thing since unsliced bread.',
367
+ links: {
368
+ author: 3,
369
+ tags: [3, 4]
370
+ }
371
+ }
372
+ }
329
373
 
330
374
  assert_response :created
331
- assert_equal 1, json_response['posts'].size
332
- assert_equal 3, json_response['posts'][0]['links']['author']
333
- assert_equal 'JR is Great', json_response['posts'][0]['title']
334
- assert_equal 'JSONAPIResources is the greatest thing since unsliced bread.', json_response['posts'][0]['body']
335
- assert_equal [3,4], json_response['posts'][0]['links']['tags']
375
+ assert json_response['posts'].is_a?(Hash)
376
+ assert_equal 3, json_response['posts']['links']['author']
377
+ assert_equal 'JR is Great', json_response['posts']['title']
378
+ assert_equal 'JSONAPIResources is the greatest thing since unsliced bread.', json_response['posts']['body']
379
+ assert_equal [3, 4], json_response['posts']['links']['tags']
336
380
  end
337
381
 
338
382
  def test_create_with_links_include_and_fields
339
- post :create, { posts: {
340
- title: 'JR is Great!',
341
- body: 'JSONAPIResources is the greatest thing since unsliced bread!',
342
- links: {
343
- author: 3,
344
- tags: [3,4]
345
- }
346
- },
347
- include: 'author,author.posts',
348
- fields: 'id,title,author'
349
- }
383
+ post :create,
384
+ {
385
+ posts: {
386
+ title: 'JR is Great!',
387
+ body: 'JSONAPIResources is the greatest thing since unsliced bread!',
388
+ links: {
389
+ author: 3,
390
+ tags: [3, 4]
391
+ }
392
+ },
393
+ include: 'author,author.posts',
394
+ fields: 'id,title,author'
395
+ }
350
396
 
351
397
  assert_response :created
352
- assert_equal 1, json_response['posts'].size
353
- assert_equal 3, json_response['posts'][0]['links']['author']
354
- assert_equal 'JR is Great!', json_response['posts'][0]['title']
355
- assert_equal nil, json_response['posts'][0]['body']
356
- assert_equal nil, json_response['posts'][0]['links']['tags']
398
+ assert json_response['posts'].is_a?(Hash)
399
+ assert_equal 3, json_response['posts']['links']['author']
400
+ assert_equal 'JR is Great!', json_response['posts']['title']
401
+ assert_equal nil, json_response['posts']['body']
402
+ assert_equal nil, json_response['posts']['links']['tags']
357
403
  assert_not_nil json_response['linked']['posts']
358
404
  assert_not_nil json_response['linked']['people']
359
405
  assert_nil json_response['linked']['tags']
@@ -362,111 +408,201 @@ class PostsControllerTest < ActionController::TestCase
362
408
  def test_update_with_links
363
409
  javascript = Section.find_by(name: 'javascript')
364
410
 
365
- post :update, {id: 3, posts: {
366
- title: 'A great new Post',
367
- links: {
368
- section: javascript.id,
369
- tags: [3,4]
411
+ put :update,
412
+ {
413
+ id: 3,
414
+ posts: {
415
+ title: 'A great new Post',
416
+ links: {
417
+ section: javascript.id,
418
+ tags: [3, 4]
419
+ }
420
+ }
370
421
  }
371
- }
372
- }
373
422
 
374
423
  assert_response :success
375
- assert_equal 1, json_response['posts'].size
376
- assert_equal 3, json_response['posts'][0]['links']['author']
377
- assert_equal javascript.id, json_response['posts'][0]['links']['section']
378
- assert_equal 'A great new Post', json_response['posts'][0]['title']
379
- assert_equal 'AAAA', json_response['posts'][0]['body']
380
- assert matches_array?([3,4], json_response['posts'][0]['links']['tags'])
424
+ assert json_response['posts'].is_a?(Hash)
425
+ assert_equal 3, json_response['posts']['links']['author']
426
+ assert_equal javascript.id, json_response['posts']['links']['section']
427
+ assert_equal 'A great new Post', json_response['posts']['title']
428
+ assert_equal 'AAAA', json_response['posts']['body']
429
+ assert matches_array?([3, 4], json_response['posts']['links']['tags'])
381
430
  end
382
431
 
383
432
  def test_update_remove_links
384
- post :update, {id: 3, posts: {
385
- title: 'A great new Post',
386
- links: {
387
- section: nil,
388
- tags: []
433
+ put :update,
434
+ {
435
+ id: 3,
436
+ posts: {
437
+ title: 'A great new Post',
438
+ links: {
439
+ section: nil,
440
+ tags: []
441
+ }
442
+ }
389
443
  }
390
- }
391
- }
392
444
 
393
445
  assert_response :success
394
- assert_equal 1, json_response['posts'].size
395
- assert_equal 3, json_response['posts'][0]['links']['author']
396
- assert_equal nil, json_response['posts'][0]['links']['section']
397
- assert_equal 'A great new Post', json_response['posts'][0]['title']
398
- assert_equal 'AAAA', json_response['posts'][0]['body']
399
- assert matches_array?([], json_response['posts'][0]['links']['tags'])
446
+ assert json_response['posts'].is_a?(Hash)
447
+ assert_equal 3, json_response['posts']['links']['author']
448
+ assert_equal nil, json_response['posts']['links']['section']
449
+ assert_equal 'A great new Post', json_response['posts']['title']
450
+ assert_equal 'AAAA', json_response['posts']['body']
451
+ assert matches_array?([], json_response['posts']['links']['tags'])
400
452
  end
401
453
 
402
454
  def test_update_relationship_has_one
403
455
  ruby = Section.find_by(name: 'ruby')
456
+ post_object = Post.find(3)
457
+ assert_not_equal ruby.id, post_object.section_id
404
458
 
405
- post :create_association, {post_id: 3, association: 'section',
406
- section: ruby.id }
459
+ put :update_association, {post_id: 3, association: 'section', sections: ruby.id}
407
460
 
408
- assert_response :success
409
- assert_equal 1, json_response['posts'].size
410
- assert_equal 3, json_response['posts'][0]['links']['author']
411
- assert_equal ruby.id, json_response['posts'][0]['links']['section']
412
- assert_equal 'AAAA', json_response['posts'][0]['body']
461
+ assert_response :no_content
462
+ post_object = Post.find(3)
463
+ assert_equal ruby.id, post_object.section_id
413
464
  end
414
465
 
415
- def test_update_relationship_has_many_single
416
- post :create_association, {post_id: 3, association: 'tags',
417
- tags: [3] }
466
+ def test_update_relationship_has_one_singular_param
467
+ ruby = Section.find_by(name: 'ruby')
468
+ post_object = Post.find(3)
418
469
 
419
- assert_response :success
420
- post :create_association, {post_id: 3, association: 'tags',
421
- tags: [2] }
470
+ put :update_association, {post_id: 3, association: 'section', section: ruby.id}
422
471
 
423
- assert_response :success
424
- post :create_association, {post_id: 3, association: 'tags',
425
- tags: [5] }
472
+ assert_response :bad_request
473
+ end
426
474
 
427
- assert_response :success
428
- post :create_association, {post_id: 3, association: 'tags',
429
- tags: [5] }
475
+ def test_update_relationship_has_one_singular_param_relation_nil
476
+ ruby = Section.find_by(name: 'ruby')
477
+ post_object = Post.find(3)
478
+ post_object.section_id = nil
479
+ post_object.save!
430
480
 
431
- assert_response :success
481
+ put :update_association, {post_id: 3, association: 'section', sections: ruby.id}
432
482
 
433
- assert_equal 1, json_response['posts'].size
434
- assert_equal 3, json_response['posts'][0]['links']['author']
435
- assert matches_array? [2,3,5], json_response['posts'][0]['links']['tags']
436
- assert_equal 'AAAA', json_response['posts'][0]['body']
483
+ assert_response :no_content
484
+ post_object = Post.find(3)
485
+ assert_equal ruby.id, post_object.section_id
437
486
  end
438
487
 
439
- def test_update_relationship_has_many
440
- post :create_association, {post_id: 3, association: 'tags',
441
- tags: [2,3] }
488
+ def test_create_relationship_has_one_singular_param_relation_nil
489
+ ruby = Section.find_by(name: 'ruby')
490
+ post_object = Post.find(3)
491
+ post_object.section_id = nil
492
+ post_object.save!
442
493
 
443
- assert_response :success
444
- assert_equal 1, json_response['posts'].size
445
- assert_equal 3, json_response['posts'][0]['links']['author']
446
- assert matches_array? [2,3], json_response['posts'][0]['links']['tags']
447
- assert_equal 'AAAA', json_response['posts'][0]['body']
494
+ post :create_association, {post_id: 3, association: 'section', sections: ruby.id}
495
+
496
+ assert_response :no_content
497
+ post_object = Post.find(3)
498
+ assert_equal ruby.id, post_object.section_id
448
499
  end
449
500
 
450
- def test_update_relationship_has_one_mismatch_params
501
+ def test_create_relationship_has_one_singular_param_relation_not_nil
451
502
  ruby = Section.find_by(name: 'ruby')
503
+ js = Section.find_by(name: 'javascript')
504
+ post_object = Post.find(3)
505
+ post_object.section_id = js.id
506
+ post_object.save!
452
507
 
453
- post :create_association, {post_id: 3, association: 'section',
454
- author: 1 }
508
+ post :create_association, {post_id: 3, association: 'section', sections: ruby.id}
455
509
 
456
510
  assert_response :bad_request
457
- assert_match /The required parameter, section, is missing./, response.body
511
+ assert_match /The relation already exists./, response.body
512
+ post_object = Post.find(3)
513
+ assert_equal js.id, post_object.section_id
514
+ end
515
+
516
+ def test_update_relationship_has_many_join_table_single
517
+ put :update_association, {post_id: 3, association: 'tags', tags: []}
518
+ assert_response :no_content
519
+
520
+ post_object = Post.find(3)
521
+ assert_equal 0, post_object.tags.length
522
+
523
+ put :update_association, {post_id: 3, association: 'tags', tags: [2]}
524
+
525
+ assert_response :no_content
526
+ post_object = Post.find(3)
527
+ assert_equal 1, post_object.tags.length
528
+
529
+ put :update_association, {post_id: 3, association: 'tags', tags: 5}
530
+
531
+ assert_response :no_content
532
+ post_object = Post.find(3)
533
+ tags = post_object.tags.collect { |tag| tag.id }
534
+ assert_equal 1, tags.length
535
+ assert matches_array? [5], tags
536
+ end
537
+
538
+ def test_update_relationship_has_many_join_table
539
+ put :update_association, {post_id: 3, association: 'tags', tags: [2, 3]}
540
+
541
+ assert_response :no_content
542
+ post_object = Post.find(3)
543
+ assert_equal 2, post_object.tags.collect { |tag| tag.id }.length
544
+ assert matches_array? [2, 3], post_object.tags.collect { |tag| tag.id }
545
+ end
546
+
547
+ def test_create_relationship_has_many_join_table
548
+ put :update_association, {post_id: 3, association: 'tags', tags: [2, 3]}
549
+
550
+ assert_response :no_content
551
+ post_object = Post.find(3)
552
+ assert_equal 2, post_object.tags.collect { |tag| tag.id }.length
553
+ assert matches_array? [2, 3], post_object.tags.collect { |tag| tag.id }
554
+
555
+ post :create_association, {post_id: 3, association: 'tags', tags: [5]}
556
+
557
+ assert_response :no_content
558
+ post_object = Post.find(3)
559
+ assert_equal 3, post_object.tags.collect { |tag| tag.id }.length
560
+ assert matches_array? [2, 3, 5], post_object.tags.collect { |tag| tag.id }
561
+ end
562
+
563
+ def test_create_relationship_has_many_missing_tags
564
+ post :create_association, {post_id: 3, association: 'tags'}
565
+
566
+ assert_response :bad_request
567
+ assert_match /The required parameter, tags, is missing./, response.body
568
+ end
569
+
570
+ def test_create_relationship_has_many_join_table_record_exists
571
+ put :update_association, {post_id: 3, association: 'tags', tags: [2, 3]}
572
+
573
+ assert_response :no_content
574
+ post_object = Post.find(3)
575
+ assert_equal 2, post_object.tags.collect { |tag| tag.id }.length
576
+ assert matches_array? [2, 3], post_object.tags.collect { |tag| tag.id }
577
+
578
+ post :create_association, {post_id: 3, association: 'tags', tags: [5, 2]}
579
+
580
+ assert_response :bad_request
581
+ assert_match /The relation to 2 already exists./, response.body
582
+ end
583
+
584
+ def test_update_relationship_has_one_mismatch_params
585
+ post :create_association, {post_id: 3, association: 'section', authors: 1}
586
+
587
+ assert_response :bad_request
588
+ assert_match /The required parameter, sections, is missing./, response.body
589
+ end
590
+
591
+ def test_update_relationship_has_many_missing_tags
592
+ put :update_association, {post_id: 3, association: 'tags'}
593
+
594
+ assert_response :bad_request
595
+ assert_match /The required parameter, tags, is missing./, response.body
458
596
  end
459
597
 
460
598
  def test_delete_relationship_has_one
461
599
  ruby = Section.find_by(name: 'ruby')
462
600
 
463
- post :create_association, {post_id: 9, association: 'section',
464
- section: ruby.id }
601
+ post :create_association, {post_id: 9, association: 'section', sections: ruby.id}
465
602
 
466
- assert_response :success
467
- assert_equal ruby.id, json_response['posts'][0]['links']['section']
603
+ assert_response :no_content
468
604
 
469
- post :destroy_association, {post_id: 9, association: 'section'}
605
+ delete :destroy_association, {post_id: 9, association: 'section'}
470
606
 
471
607
  assert_response :no_content
472
608
  post = Post.find(9)
@@ -474,31 +610,46 @@ class PostsControllerTest < ActionController::TestCase
474
610
  end
475
611
 
476
612
  def test_delete_relationship_has_many
477
- post :create_association, {post_id: 9, association: 'tags',
478
- tags: [2,3] }
479
- assert_response :success
613
+ put :update_association, {post_id: 9, association: 'tags', tags: [2, 3]}
614
+ assert_response :no_content
480
615
  p = Post.find(9)
481
- assert_equal [2,3], p.tag_ids
616
+ assert_equal [2, 3], p.tag_ids
482
617
 
483
- post :destroy_association, {post_id: 9, association: 'tags', keys: '3'}
618
+ delete :destroy_association, {post_id: 9, association: 'tags', keys: '3'}
484
619
 
620
+ p.reload
485
621
  assert_response :no_content
486
622
  assert_equal [2], p.tag_ids
487
623
  end
488
624
 
625
+ def test_delete_relationship_has_many_does_not_exist
626
+ put :update_association, {post_id: 9, association: 'tags', tags: [2, 3]}
627
+ assert_response :no_content
628
+ p = Post.find(9)
629
+ assert_equal [2, 3], p.tag_ids
630
+
631
+ delete :destroy_association, {post_id: 9, association: 'tags', keys: '4'}
632
+
633
+ p.reload
634
+ assert_response :not_found
635
+ assert_equal [2, 3], p.tag_ids
636
+ end
489
637
 
490
638
  def test_update_mismatched_keys
491
639
  javascript = Section.find_by(name: 'javascript')
492
640
 
493
- post :update, {id: 3, posts: {
494
- id: 2,
495
- title: 'A great new Post',
496
- links: {
497
- section: javascript.id,
498
- tags: [3,4]
641
+ put :update,
642
+ {
643
+ id: 3,
644
+ posts: {
645
+ id: 2,
646
+ title: 'A great new Post',
647
+ links: {
648
+ section: javascript.id,
649
+ tags: [3, 4]
650
+ }
651
+ }
499
652
  }
500
- }
501
- }
502
653
 
503
654
  assert_response :bad_request
504
655
  assert_match /The URL does not support the key 2/, response.body
@@ -507,15 +658,18 @@ class PostsControllerTest < ActionController::TestCase
507
658
  def test_update_extra_param
508
659
  javascript = Section.find_by(name: 'javascript')
509
660
 
510
- post :update, {id: 3, posts: {
511
- asdfg: 'aaaa',
512
- title: 'A great new Post',
513
- links: {
514
- section: javascript.id,
515
- tags: [3,4]
661
+ put :update,
662
+ {
663
+ id: 3,
664
+ posts: {
665
+ asdfg: 'aaaa',
666
+ title: 'A great new Post',
667
+ links: {
668
+ section: javascript.id,
669
+ tags: [3, 4]
670
+ }
671
+ }
516
672
  }
517
- }
518
- }
519
673
 
520
674
  assert_response :bad_request
521
675
  assert_match /asdfg is not allowed/, response.body
@@ -524,15 +678,18 @@ class PostsControllerTest < ActionController::TestCase
524
678
  def test_update_extra_param_in_links
525
679
  javascript = Section.find_by(name: 'javascript')
526
680
 
527
- post :update, {id: 3, posts: {
528
- title: 'A great new Post',
529
- links: {
530
- asdfg: 'aaaa',
531
- section: javascript.id,
532
- tags: [3,4]
681
+ put :update,
682
+ {
683
+ id: 3,
684
+ posts: {
685
+ title: 'A great new Post',
686
+ links: {
687
+ asdfg: 'aaaa',
688
+ section: javascript.id,
689
+ tags: [3, 4]
690
+ }
691
+ }
533
692
  }
534
- }
535
- }
536
693
 
537
694
  assert_response :bad_request
538
695
  assert_match /asdfg is not allowed/, response.body
@@ -541,14 +698,17 @@ class PostsControllerTest < ActionController::TestCase
541
698
  def test_update_missing_param
542
699
  javascript = Section.find_by(name: 'javascript')
543
700
 
544
- post :update, {id: 3, posts_spelled_wrong: {
545
- title: 'A great new Post',
546
- links: {
547
- section: javascript.id,
548
- tags: [3,4]
701
+ put :update,
702
+ {
703
+ id: 3,
704
+ posts_spelled_wrong: {
705
+ title: 'A great new Post',
706
+ links: {
707
+ section: javascript.id,
708
+ tags: [3, 4]
709
+ }
710
+ }
549
711
  }
550
- }
551
- }
552
712
 
553
713
  assert_response :bad_request
554
714
  assert_match /The required parameter, posts, is missing./, response.body
@@ -557,24 +717,27 @@ class PostsControllerTest < ActionController::TestCase
557
717
  def test_update_multiple
558
718
  javascript = Section.find_by(name: 'javascript')
559
719
 
560
- post :update, {id: [3,9], posts: [
561
- {
562
- id: 3,
563
- title: 'A great new Post QWERTY',
564
- links: {
565
- section: javascript.id,
566
- tags: [3,4]
567
- }
568
- },
569
- {
570
- id: 9,
571
- title: 'A great new Post ASDFG',
572
- links: {
573
- section: javascript.id,
574
- tags: [3,4]
575
- }
576
- }
577
- ]}
720
+ put :update,
721
+ {
722
+ id: [3, 9],
723
+ posts: [
724
+ {
725
+ id: 3,
726
+ title: 'A great new Post QWERTY',
727
+ links: {
728
+ section: javascript.id,
729
+ tags: [3, 4]
730
+ }
731
+ },
732
+ {
733
+ id: 9,
734
+ title: 'A great new Post ASDFG',
735
+ links: {
736
+ section: javascript.id,
737
+ tags: [3, 4]
738
+ }
739
+ }
740
+ ]}
578
741
 
579
742
  assert_response :success
580
743
  assert_equal json_response['posts'].size, 2
@@ -582,34 +745,37 @@ class PostsControllerTest < ActionController::TestCase
582
745
  assert_equal json_response['posts'][0]['links']['section'], javascript.id
583
746
  assert_equal json_response['posts'][0]['title'], 'A great new Post QWERTY'
584
747
  assert_equal json_response['posts'][0]['body'], 'AAAA'
585
- assert_equal json_response['posts'][0]['links']['tags'], [3,4]
748
+ assert_equal json_response['posts'][0]['links']['tags'], [3, 4]
586
749
 
587
750
  assert_equal json_response['posts'][1]['links']['author'], 3
588
751
  assert_equal json_response['posts'][1]['links']['section'], javascript.id
589
752
  assert_equal json_response['posts'][1]['title'], 'A great new Post ASDFG'
590
753
  assert_equal json_response['posts'][1]['body'], 'AAAA'
591
- assert_equal json_response['posts'][1]['links']['tags'], [3,4]
754
+ assert_equal json_response['posts'][1]['links']['tags'], [3, 4]
592
755
  end
593
756
 
594
757
  def test_update_multiple_missing_keys
595
758
  javascript = Section.find_by(name: 'javascript')
596
759
 
597
- post :update, {id: [3,9], posts: [
760
+ put :update,
598
761
  {
599
- title: 'A great new Post ASDFG',
600
- links: {
762
+ id: [3, 9],
763
+ posts: [
764
+ {
765
+ title: 'A great new Post ASDFG',
766
+ links: {
601
767
  section: javascript.id,
602
- tags: [3,4]
603
- }
604
- },
605
- {
606
- title: 'A great new Post QWERTY',
607
- links: {
768
+ tags: [3, 4]
769
+ }
770
+ },
771
+ {
772
+ title: 'A great new Post QWERTY',
773
+ links: {
608
774
  section: javascript.id,
609
- tags: [3,4]
775
+ tags: [3, 4]
776
+ }
610
777
  }
611
- }
612
- ]}
778
+ ]}
613
779
 
614
780
  assert_response :bad_request
615
781
  assert_match /A key is required/, response.body
@@ -618,24 +784,27 @@ class PostsControllerTest < ActionController::TestCase
618
784
  def test_update_mismatch_keys
619
785
  javascript = Section.find_by(name: 'javascript')
620
786
 
621
- post :update, {id: [3,9], posts: [
787
+ put :update,
622
788
  {
623
- id: 3,
624
- title: 'A great new Post ASDFG',
625
- links: {
789
+ id: [3, 9],
790
+ posts: [
791
+ {
792
+ id: 3,
793
+ title: 'A great new Post ASDFG',
794
+ links: {
626
795
  section: javascript.id,
627
- tags: [3,4]
628
- }
629
- },
630
- {
631
- id: 8,
632
- title: 'A great new Post QWERTY',
633
- links: {
796
+ tags: [3, 4]
797
+ }
798
+ },
799
+ {
800
+ id: 8,
801
+ title: 'A great new Post QWERTY',
802
+ links: {
634
803
  section: javascript.id,
635
- tags: [3,4]
804
+ tags: [3, 4]
805
+ }
636
806
  }
637
- }
638
- ]}
807
+ ]}
639
808
 
640
809
  assert_response :bad_request
641
810
  assert_match /The URL does not support the key 8/, response.body
@@ -644,38 +813,44 @@ class PostsControllerTest < ActionController::TestCase
644
813
  def test_update_multiple_count_mismatch
645
814
  javascript = Section.find_by(name: 'javascript')
646
815
 
647
- post :update, {id: [3,9,2], posts: [
816
+ put :update,
648
817
  {
649
- id: 3,
650
- title: 'A great new Post QWERTY',
651
- links: {
818
+ id: [3, 9, 2],
819
+ posts: [
820
+ {
821
+ id: 3,
822
+ title: 'A great new Post QWERTY',
823
+ links: {
652
824
  section: javascript.id,
653
- tags: [3,4]
654
- }
655
- },
656
- {
657
- id: 9,
658
- title: 'A great new Post ASDFG',
659
- links: {
825
+ tags: [3, 4]
826
+ }
827
+ },
828
+ {
829
+ id: 9,
830
+ title: 'A great new Post ASDFG',
831
+ links: {
660
832
  section: javascript.id,
661
- tags: [3,4]
833
+ tags: [3, 4]
834
+ }
662
835
  }
663
- }
664
- ]}
836
+ ]}
665
837
 
666
838
  assert_response :bad_request
667
839
  assert_match /Count to key mismatch/, response.body
668
840
  end
669
841
 
670
842
  def test_update_unpermitted_attributes
671
- post :update, {id: 3, posts: {
672
- subject: 'A great new Post',
673
- links: {
674
- author: 1,
675
- tags: [3,4]
843
+ put :update,
844
+ {
845
+ id: 3,
846
+ posts: {
847
+ subject: 'A great new Post',
848
+ links: {
849
+ author: 1,
850
+ tags: [3, 4]
851
+ }
852
+ }
676
853
  }
677
- }
678
- }
679
854
 
680
855
  assert_response :bad_request
681
856
  assert_match /author is not allowed./, response.body
@@ -683,42 +858,45 @@ class PostsControllerTest < ActionController::TestCase
683
858
  end
684
859
 
685
860
  def test_update_bad_attributes
686
- post :update, {id: 3, posts: {
687
- subject: 'A great new Post',
688
- linked_objects: {
689
- author: 1,
690
- tags: [3,4]
861
+ put :update,
862
+ {
863
+ id: 3,
864
+ posts: {
865
+ subject: 'A great new Post',
866
+ linked_objects: {
867
+ author: 1,
868
+ tags: [3, 4]
869
+ }
870
+ }
691
871
  }
692
- }
693
- }
694
872
 
695
873
  assert_response :bad_request
696
874
  end
697
875
 
698
876
  def test_delete_single
699
877
  initial_count = Post.count
700
- post :destroy, {id: '4'}
878
+ delete :destroy, {id: '4'}
701
879
  assert_response :no_content
702
880
  assert_equal initial_count - 1, Post.count
703
881
  end
704
882
 
705
883
  def test_delete_multiple
706
884
  initial_count = Post.count
707
- post :destroy, {id: '5,6'}
885
+ delete :destroy, {id: '5,6'}
708
886
  assert_response :no_content
709
887
  assert_equal initial_count - 2, Post.count
710
888
  end
711
889
 
712
890
  def test_delete_multiple_one_does_not_exist
713
891
  initial_count = Post.count
714
- post :destroy, {id: '5,6,99999'}
892
+ delete :destroy, {id: '5,6,99999'}
715
893
  assert_response :not_found
716
894
  assert_equal initial_count, Post.count
717
895
  end
718
896
 
719
897
  def test_delete_extra_param
720
898
  initial_count = Post.count
721
- post :destroy, {id: '4', asdfg: 'aaaa'}
899
+ delete :destroy, {id: '4', asdfg: 'aaaa'}
722
900
  assert_response :bad_request
723
901
  assert_equal initial_count, Post.count
724
902
  end
@@ -732,7 +910,7 @@ class PostsControllerTest < ActionController::TestCase
732
910
  def test_show_has_many_relationship
733
911
  get :show_association, {post_id: '1', association: 'tags'}
734
912
  assert_response :success
735
- assert_equal [1,2,3], json_response['tags']
913
+ assert_equal [1, 2, 3], json_response['tags']
736
914
  end
737
915
  end
738
916
 
@@ -747,57 +925,237 @@ class TagsControllerTest < ActionController::TestCase
747
925
  def test_tags_show_multiple
748
926
  get :show, {id: '6,7,8,9'}
749
927
  assert_response :success
928
+ assert json_response['tags'].is_a?(Array)
750
929
  assert_equal 4, json_response['tags'].size
751
930
  end
752
931
 
753
932
  def test_tags_show_multiple_with_include
754
933
  get :show, {id: '6,7,8,9', include: 'posts,posts.tags,posts.author.posts'}
755
934
  assert_response :success
935
+ assert json_response['tags'].is_a?(Array)
756
936
  assert_equal 4, json_response['tags'].size
757
937
  assert_equal 2, json_response['linked']['posts'].size
758
938
  end
759
939
  end
760
940
 
761
941
  class ExpenseEntriesControllerTest < ActionController::TestCase
942
+ def after_teardown
943
+ JSONAPI.configuration.json_key_format = :camelized_key
944
+ end
945
+
762
946
  def test_expense_entries_index
763
947
  get :index
764
948
  assert_response :success
765
- assert_equal 2, json_response['expense_entries'].size
949
+ assert json_response['expenseEntries'].is_a?(Array)
950
+ assert_equal 2, json_response['expenseEntries'].size
951
+ end
952
+
953
+ def test_expense_entries_show
954
+ get :show, {id: 1}
955
+ assert_response :success
956
+ assert json_response['expenseEntries'].is_a?(Hash)
957
+ end
958
+
959
+ def test_expense_entries_show_include
960
+ get :show, {id: 1, include: 'isoCurrency,employee'}
961
+ assert_response :success
962
+ assert json_response['expenseEntries'].is_a?(Hash)
963
+ assert_equal 1, json_response['linked']['isoCurrencies'].size
964
+ assert_equal 1, json_response['linked']['people'].size
965
+ end
966
+
967
+ def test_expense_entries_show_bad_include_missing_association
968
+ get :show, {id: 1, include: 'isoCurrencies,employees'}
969
+ assert_response :bad_request
970
+ assert_match /isoCurrencies is not a valid association of expenseEntries/, json_response['errors'][0]['detail']
971
+ assert_match /employees is not a valid association of expenseEntries/, json_response['errors'][1]['detail']
972
+ end
973
+
974
+ def test_expense_entries_show_bad_include_missing_sub_association
975
+ get :show, {id: 1, include: 'isoCurrency,employee.post'}
976
+ assert_response :bad_request
977
+ assert_match /post is not a valid association of people/, json_response['errors'][0]['detail']
978
+ end
979
+
980
+ def test_expense_entries_show_fields
981
+ get :show, {id: 1, include: 'isoCurrency,employee', 'fields' => 'transactionDate'}
982
+ assert_response :success
983
+ assert json_response['expenseEntries'].is_a?(Hash)
984
+ assert json_response['expenseEntries'].has_key?('transactionDate')
985
+ refute json_response['expenseEntries'].has_key?('id')
986
+ refute json_response['expenseEntries'].has_key?('links')
987
+ assert_equal 1, json_response['linked']['isoCurrencies'].size
988
+ assert_equal 1, json_response['linked']['people'].size
989
+ end
990
+
991
+ def test_expense_entries_show_fields_type
992
+ get :show, {id: 1, include: 'isoCurrency,employee', 'fields' => {'expenseEntries' => 'transactionDate'}}
993
+ assert_response :success
994
+ assert json_response['expenseEntries'].is_a?(Hash)
995
+ assert json_response['expenseEntries'].has_key?('transactionDate')
996
+ refute json_response['expenseEntries'].has_key?('id')
997
+ refute json_response['expenseEntries'].has_key?('links')
998
+ assert_equal 1, json_response['linked']['isoCurrencies'].size
999
+ assert_equal 1, json_response['linked']['people'].size
1000
+ end
1001
+
1002
+ def test_expense_entries_show_fields_type_many
1003
+ get :show, {id: 1, include: 'isoCurrency,employee', 'fields' => {'expenseEntries' => 'transactionDate',
1004
+ 'isoCurrencies' => 'code,name'}}
1005
+ assert_response :success
1006
+ assert json_response['expenseEntries'].is_a?(Hash)
1007
+ assert json_response['expenseEntries'].has_key?('transactionDate')
1008
+ refute json_response['expenseEntries'].has_key?('id')
1009
+ refute json_response['expenseEntries'].has_key?('links')
1010
+ assert_equal 1, json_response['linked']['isoCurrencies'].size
1011
+ assert_equal 1, json_response['linked']['people'].size
1012
+ assert json_response['linked']['isoCurrencies'][0].has_key?('code')
1013
+ assert json_response['linked']['isoCurrencies'][0].has_key?('name')
1014
+ refute json_response['linked']['isoCurrencies'][0].has_key?('countryName')
1015
+ end
1016
+
1017
+ def test_create_expense_entries_underscored
1018
+ JSONAPI.configuration.json_key_format = :underscored_key
1019
+
1020
+ post :create,
1021
+ {
1022
+ expense_entries: {
1023
+ transaction_date: '2014/04/15',
1024
+ cost: 50.58,
1025
+ links: {
1026
+ employee: 3,
1027
+ iso_currency: 'USD'
1028
+ }
1029
+ },
1030
+ include: 'iso_currency',
1031
+ fields: 'id,transaction_date,iso_currency,cost,employee'
1032
+ }
1033
+
1034
+ assert_response :created
1035
+ assert json_response['expense_entries'].is_a?(Hash)
1036
+ assert_equal 3, json_response['expense_entries']['links']['employee']
1037
+ assert_equal 'USD', json_response['expense_entries']['links']['iso_currency']
1038
+ assert_equal '50.58', json_response['expense_entries']['cost']
1039
+
1040
+ delete :destroy, {id: json_response['expense_entries']['id']}
1041
+ assert_response :no_content
1042
+ end
1043
+
1044
+ def test_create_expense_entries_camelized_key
1045
+ JSONAPI.configuration.json_key_format = :camelized_key
1046
+
1047
+ post :create,
1048
+ {
1049
+ expenseEntries: {
1050
+ transactionDate: '2014/04/15',
1051
+ cost: 50.58,
1052
+ links: {
1053
+ employee: 3,
1054
+ isoCurrency: 'USD'
1055
+ }
1056
+ },
1057
+ include: 'isoCurrency',
1058
+ fields: 'id,transactionDate,isoCurrency,cost,employee'
1059
+ }
1060
+
1061
+ assert_response :created
1062
+ assert json_response['expenseEntries'].is_a?(Hash)
1063
+ assert_equal 3, json_response['expenseEntries']['links']['employee']
1064
+ assert_equal 'USD', json_response['expenseEntries']['links']['isoCurrency']
1065
+ assert_equal '50.58', json_response['expenseEntries']['cost']
1066
+
1067
+ delete :destroy, {id: json_response['expenseEntries']['id']}
1068
+ assert_response :no_content
1069
+ end
1070
+
1071
+ def test_create_expense_entries_dasherized_key
1072
+ JSONAPI.configuration.json_key_format = :dasherized_key
1073
+
1074
+ post :create,
1075
+ {
1076
+ 'expense-entries' => {
1077
+ 'transaction-date' => '2014/04/15',
1078
+ cost: 50.58,
1079
+ links: {
1080
+ employee: 3,
1081
+ 'iso-currency' => 'USD'
1082
+ }
1083
+ },
1084
+ include: 'iso-currency',
1085
+ fields: 'id,transaction-date,iso-currency,cost,employee'
1086
+ }
1087
+
1088
+ assert_response :created
1089
+ assert json_response['expense-entries'].is_a?(Hash)
1090
+ assert_equal 3, json_response['expense-entries']['links']['employee']
1091
+ assert_equal 'USD', json_response['expense-entries']['links']['iso-currency']
1092
+ assert_equal '50.58', json_response['expense-entries']['cost']
1093
+
1094
+ delete :destroy, {id: json_response['expense-entries']['id']}
1095
+ assert_response :no_content
766
1096
  end
767
1097
  end
768
1098
 
769
- class CurrenciesControllerTest < ActionController::TestCase
1099
+ class IsoCurrenciesControllerTest < ActionController::TestCase
1100
+ def after_teardown
1101
+ JSONAPI.configuration.json_key_format = :camelized_key
1102
+ end
1103
+
770
1104
  def test_currencies_index
771
1105
  get :index
772
1106
  assert_response :success
773
- assert_equal 2, json_response['currencies'].size
1107
+ assert_equal 2, json_response['isoCurrencies'].size
1108
+ end
1109
+
1110
+ def test_currencies_json_key_underscored
1111
+ JSONAPI.configuration.json_key_format = :underscored_key
1112
+ get :index
1113
+ assert_response :success
1114
+ assert_equal 2, json_response['iso_currencies'].size
1115
+ end
1116
+
1117
+ def test_currencies_json_key_dasherized
1118
+ JSONAPI.configuration.json_key_format = :dasherized_key
1119
+ get :index
1120
+ assert_response :success
1121
+ assert_equal 2, json_response['iso-currencies'].size
1122
+ end
1123
+
1124
+ def test_currencies_custom_json_key
1125
+ JSONAPI.configuration.json_key_format = :upper_camelized_key
1126
+ get :index
1127
+ assert_response :success
1128
+ assert_equal 2, json_response['IsoCurrencies'].size
774
1129
  end
775
1130
 
776
1131
  def test_currencies_show
777
- get :show, {code: 'USD', include: 'expense_entries,expense_entries.currency_codes'}
1132
+ get :show, {code: 'USD'}
778
1133
  assert_response :success
779
- assert_equal 1, json_response['currencies'].size
780
- assert_equal 2, json_response['linked']['expense_entries'].size
1134
+ assert json_response['isoCurrencies'].is_a?(Hash)
781
1135
  end
782
1136
  end
783
1137
 
784
1138
  class PeopleControllerTest < ActionController::TestCase
785
1139
  def test_create_validations
786
- post :create, { people: {
787
- name: 'Steve Jobs',
788
- email: 'sj@email.zzz',
789
- date_joined: DateTime.parse('2014-1-30 4:20:00 UTC +00:00')
790
- }
791
- }
1140
+ post :create,
1141
+ {
1142
+ people: {
1143
+ name: 'Steve Jobs',
1144
+ email: 'sj@email.zzz',
1145
+ dateJoined: DateTime.parse('2014-1-30 4:20:00 UTC +00:00')
1146
+ }
1147
+ }
792
1148
 
793
1149
  assert_response :success
794
1150
  end
795
1151
 
796
1152
  def test_create_validations_missing_attribute
797
- post :create, { people: {
798
- email: 'sj@email.zzz'
799
- }
800
- }
1153
+ post :create,
1154
+ {
1155
+ people: {
1156
+ email: 'sj@email.zzz'
1157
+ }
1158
+ }
801
1159
 
802
1160
  assert_response :bad_request
803
1161
  assert_equal 2, json_response['errors'].size
@@ -808,10 +1166,13 @@ class PeopleControllerTest < ActionController::TestCase
808
1166
  end
809
1167
 
810
1168
  def test_update_validations_missing_attribute
811
- post :update, { id: 3, people: {
812
- name: ''
813
- }
814
- }
1169
+ put :update,
1170
+ {
1171
+ id: 3,
1172
+ people: {
1173
+ name: ''
1174
+ }
1175
+ }
815
1176
 
816
1177
  assert_response :bad_request
817
1178
  assert_equal 1, json_response['errors'].size
@@ -821,7 +1182,7 @@ class PeopleControllerTest < ActionController::TestCase
821
1182
 
822
1183
  def test_delete_locked
823
1184
  initial_count = Person.count
824
- post :destroy, {id: '3'}
1185
+ delete :destroy, {id: '3'}
825
1186
  assert_response :locked
826
1187
  assert_equal initial_count, Person.count
827
1188
  end
@@ -875,66 +1236,76 @@ class AuthorsControllerTest < ActionController::TestCase
875
1236
  end
876
1237
 
877
1238
  class BreedsControllerTest < ActionController::TestCase
1239
+ # Note: Breed names go through the TitleValueFormatter
1240
+
878
1241
  def test_poro_index
879
1242
  get :index
880
1243
  assert_response :success
881
1244
  assert_equal 0, json_response['breeds'][0]['id']
882
- assert_equal 'persian', json_response['breeds'][0]['name']
1245
+ assert_equal 'Persian', json_response['breeds'][0]['name']
883
1246
  end
884
1247
 
885
1248
  def test_poro_show
886
1249
  get :show, {id: '0'}
887
1250
  assert_response :success
888
- assert_equal 1, json_response['breeds'].size
889
- assert_equal 0, json_response['breeds'][0]['id']
890
- assert_equal 'persian', json_response['breeds'][0]['name']
1251
+ assert json_response['breeds'].is_a?(Hash)
1252
+ assert_equal 0, json_response['breeds']['id']
1253
+ assert_equal 'Persian', json_response['breeds']['name']
891
1254
  end
892
1255
 
893
1256
  def test_poro_show_multiple
894
1257
  get :show, {id: '0,2'}
895
1258
  assert_response :success
1259
+ assert json_response['breeds'].is_a?(Array)
896
1260
  assert_equal 2, json_response['breeds'].size
897
1261
  assert_equal 0, json_response['breeds'][0]['id']
898
- assert_equal 'persian', json_response['breeds'][0]['name']
1262
+ assert_equal 'Persian', json_response['breeds'][0]['name']
899
1263
  assert_equal 2, json_response['breeds'][1]['id']
900
- assert_equal 'sphinx', json_response['breeds'][1]['name']
1264
+ assert_equal 'Sphinx', json_response['breeds'][1]['name']
901
1265
  end
902
1266
 
903
1267
  def test_poro_create_simple
904
- post :create, { breeds: {
905
- name: 'tabby'
906
- }
907
- }
1268
+ post :create,
1269
+ {
1270
+ breeds: {
1271
+ name: 'tabby'
1272
+ }
1273
+ }
908
1274
 
909
1275
  assert_response :created
910
- assert_equal 1, json_response['breeds'].size
911
- assert_equal 'tabby', json_response['breeds'][0]['name']
1276
+ assert json_response['breeds'].is_a?(Hash)
1277
+ assert_equal 'Tabby', json_response['breeds']['name']
912
1278
  end
913
1279
 
914
1280
  def test_poro_create_update
915
- post :create, { breeds: {
916
- name: 'calic'
917
- }
918
- }
1281
+ post :create,
1282
+ {
1283
+ breeds: {
1284
+ name: 'CALIC'
1285
+ }
1286
+ }
919
1287
 
920
1288
  assert_response :created
921
- assert_equal 1, json_response['breeds'].size
922
- assert_equal 'calic', json_response['breeds'][0]['name']
1289
+ assert json_response['breeds'].is_a?(Hash)
1290
+ assert_equal 'Calic', json_response['breeds']['name']
923
1291
 
924
- post :update, {id: json_response['breeds'][0]['id'], breeds: {
925
- name: 'calico'
926
- }
927
- }
1292
+ put :update,
1293
+ {
1294
+ id: json_response['breeds']['id'],
1295
+ breeds: {
1296
+ name: 'calico'
1297
+ }
1298
+ }
928
1299
  assert_response :success
929
- assert_equal 1, json_response['breeds'].size
930
- assert_equal 'calico', json_response['breeds'][0]['name']
1300
+ assert json_response['breeds'].is_a?(Hash)
1301
+ assert_equal 'Calico', json_response['breeds']['name']
931
1302
  end
932
1303
 
933
1304
  def test_poro_delete
934
1305
  initial_count = $breed_data.breeds.keys.count
935
- post :destroy, {id: '3'}
1306
+ delete :destroy, {id: '3'}
936
1307
  assert_response :no_content
937
1308
  assert_equal initial_count - 1, $breed_data.breeds.keys.count
938
1309
  end
939
1310
 
940
- end
1311
+ end