jsonapi-resources 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +109 -3
- data/lib/jsonapi/acts_as_resource_controller.rb +7 -7
- data/lib/jsonapi/error.rb +2 -1
- data/lib/jsonapi/exceptions.rb +8 -1
- data/lib/jsonapi/link_builder.rb +2 -2
- data/lib/jsonapi/relationship.rb +4 -3
- data/lib/jsonapi/request.rb +1 -6
- data/lib/jsonapi/resource.rb +142 -98
- data/lib/jsonapi/resource_serializer.rb +7 -7
- data/lib/jsonapi/resources/version.rb +1 -1
- data/lib/jsonapi/response_document.rb +2 -2
- data/test/controllers/controller_test.rb +77 -33
- data/test/fixtures/active_record.rb +169 -93
- data/test/fixtures/book_authors.yml +3 -0
- data/test/integration/requests/request_test.rb +63 -57
- data/test/test_helper.rb +7 -0
- data/test/unit/resource/resource_test.rb +69 -3
- data/test/unit/serializer/serializer_test.rb +1 -1
- metadata +4 -2
@@ -12,36 +12,41 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
12
12
|
JSONAPI.configuration.route_format = :underscored_route
|
13
13
|
end
|
14
14
|
|
15
|
+
def assert_jsonapi_response(expected_status)
|
16
|
+
assert_equal JSONAPI::MEDIA_TYPE, response.content_type
|
17
|
+
assert_equal expected_status, status
|
18
|
+
end
|
19
|
+
|
15
20
|
def test_get
|
16
21
|
get '/posts'
|
17
|
-
|
22
|
+
assert_jsonapi_response 200
|
18
23
|
end
|
19
24
|
|
20
25
|
def test_get_inflected_resource
|
21
26
|
get '/api/v8/numeros_telefone'
|
22
|
-
|
27
|
+
assert_jsonapi_response 200
|
23
28
|
end
|
24
29
|
|
25
30
|
def test_get_nested_to_one
|
26
31
|
get '/posts/1/author'
|
27
|
-
|
32
|
+
assert_jsonapi_response 200
|
28
33
|
end
|
29
34
|
|
30
35
|
def test_get_nested_to_many
|
31
36
|
get '/posts/1/comments'
|
32
|
-
|
37
|
+
assert_jsonapi_response 200
|
33
38
|
end
|
34
39
|
|
35
40
|
def test_get_nested_to_many_bad_param
|
36
41
|
get '/posts/1/comments?relationship=books'
|
37
|
-
|
42
|
+
assert_jsonapi_response 200
|
38
43
|
end
|
39
44
|
|
40
45
|
def test_get_underscored_key
|
41
46
|
original_config = JSONAPI.configuration.dup
|
42
47
|
JSONAPI.configuration.json_key_format = :underscored_key
|
43
48
|
get '/iso_currencies'
|
44
|
-
|
49
|
+
assert_jsonapi_response 200
|
45
50
|
assert_equal 3, json_response['data'].size
|
46
51
|
ensure
|
47
52
|
JSONAPI.configuration = original_config
|
@@ -51,7 +56,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
51
56
|
original_config = JSONAPI.configuration.dup
|
52
57
|
JSONAPI.configuration.json_key_format = :underscored_key
|
53
58
|
get '/iso_currencies?filter[country_name]=Canada'
|
54
|
-
|
59
|
+
assert_jsonapi_response 200
|
55
60
|
assert_equal 1, json_response['data'].size
|
56
61
|
assert_equal 'Canada', json_response['data'][0]['attributes']['country_name']
|
57
62
|
ensure
|
@@ -62,7 +67,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
62
67
|
original_config = JSONAPI.configuration.dup
|
63
68
|
JSONAPI.configuration.json_key_format = :camelized_key
|
64
69
|
get '/iso_currencies?filter[countryName]=Canada'
|
65
|
-
|
70
|
+
assert_jsonapi_response 200
|
66
71
|
assert_equal 1, json_response['data'].size
|
67
72
|
assert_equal 'Canada', json_response['data'][0]['attributes']['countryName']
|
68
73
|
ensure
|
@@ -73,7 +78,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
73
78
|
original_config = JSONAPI.configuration.dup
|
74
79
|
JSONAPI.configuration.json_key_format = :camelized_key
|
75
80
|
get '/api/v4/isoCurrencies?filter[countryName]=Canada'
|
76
|
-
|
81
|
+
assert_jsonapi_response 200
|
77
82
|
assert_equal 1, json_response['data'].size
|
78
83
|
assert_equal 'Canada', json_response['data'][0]['attributes']['countryName']
|
79
84
|
ensure
|
@@ -85,7 +90,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
85
90
|
JSONAPI.configuration.json_key_format = :camelized_key
|
86
91
|
JSONAPI.configuration.route_format = :camelized_route
|
87
92
|
get '/api/v4/expenseEntries/1/relationships/isoCurrency'
|
88
|
-
|
93
|
+
assert_jsonapi_response 200
|
89
94
|
assert_hash_equals({'links' => {
|
90
95
|
'self' => 'http://www.example.com/api/v4/expenseEntries/1/relationships/isoCurrency',
|
91
96
|
'related' => 'http://www.example.com/api/v4/expenseEntries/1/isoCurrency'
|
@@ -142,7 +147,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
142
147
|
}
|
143
148
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
144
149
|
|
145
|
-
|
150
|
+
assert_jsonapi_response 200
|
146
151
|
end
|
147
152
|
|
148
153
|
def test_post_single_without_content_type
|
@@ -181,7 +186,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
181
186
|
}
|
182
187
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
183
188
|
|
184
|
-
|
189
|
+
assert_jsonapi_response 201
|
185
190
|
end
|
186
191
|
|
187
192
|
def test_post_single_missing_data_contents
|
@@ -191,7 +196,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
191
196
|
}
|
192
197
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
193
198
|
|
194
|
-
|
199
|
+
assert_jsonapi_response 400
|
195
200
|
end
|
196
201
|
|
197
202
|
def test_post_single_minimal_valid
|
@@ -202,7 +207,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
202
207
|
}
|
203
208
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
204
209
|
|
205
|
-
|
210
|
+
assert_jsonapi_response 201
|
206
211
|
assert_nil json_response['data']['attributes']['body']
|
207
212
|
assert_nil json_response['data']['relationships']['post']['data']
|
208
213
|
assert_nil json_response['data']['relationships']['author']['data']
|
@@ -216,7 +221,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
216
221
|
}
|
217
222
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
218
223
|
|
219
|
-
|
224
|
+
assert_jsonapi_response 422
|
220
225
|
end
|
221
226
|
|
222
227
|
def test_update_relationship_without_content_type
|
@@ -246,7 +251,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
246
251
|
rogue = Comment.find_by(body: 'Rogue Comment Here')
|
247
252
|
patch '/posts/5/relationships/comments', { 'data' => [{type: 'comments', id: rogue.id.to_s }]}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
248
253
|
|
249
|
-
|
254
|
+
assert_jsonapi_response 403
|
250
255
|
end
|
251
256
|
|
252
257
|
def test_post_update_relationship_to_many
|
@@ -262,7 +267,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
262
267
|
rogue = Comment.find_by(body: 'Rogue Comment Here')
|
263
268
|
put '/posts/5/relationships/comments', { 'data' => [{type: 'comments', id: rogue.id.to_s }]}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
264
269
|
|
265
|
-
|
270
|
+
assert_jsonapi_response 403
|
266
271
|
end
|
267
272
|
|
268
273
|
def test_index_content_type
|
@@ -352,14 +357,14 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
352
357
|
def test_pagination_none
|
353
358
|
Api::V2::BookResource.paginator :none
|
354
359
|
get '/api/v2/books'
|
355
|
-
|
360
|
+
assert_jsonapi_response 200
|
356
361
|
assert_equal 901, json_response['data'].size
|
357
362
|
end
|
358
363
|
|
359
364
|
def test_pagination_offset_style
|
360
365
|
Api::V2::BookResource.paginator :offset
|
361
366
|
get '/api/v2/books'
|
362
|
-
|
367
|
+
assert_jsonapi_response 200
|
363
368
|
assert_equal JSONAPI.configuration.default_page_size, json_response['data'].size
|
364
369
|
assert_equal 'Book 0', json_response['data'][0]['attributes']['title']
|
365
370
|
end
|
@@ -367,7 +372,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
367
372
|
def test_pagination_offset_style_offset
|
368
373
|
Api::V2::BookResource.paginator :offset
|
369
374
|
get '/api/v2/books?page[offset]=50'
|
370
|
-
|
375
|
+
assert_jsonapi_response 200
|
371
376
|
assert_equal JSONAPI.configuration.default_page_size, json_response['data'].size
|
372
377
|
assert_equal 'Book 50', json_response['data'][0]['attributes']['title']
|
373
378
|
end
|
@@ -375,7 +380,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
375
380
|
def test_pagination_offset_style_offset_limit
|
376
381
|
Api::V2::BookResource.paginator :offset
|
377
382
|
get '/api/v2/books?page[offset]=50&page[limit]=20'
|
378
|
-
|
383
|
+
assert_jsonapi_response 200
|
379
384
|
assert_equal 20, json_response['data'].size
|
380
385
|
assert_equal 'Book 50', json_response['data'][0]['attributes']['title']
|
381
386
|
end
|
@@ -383,13 +388,13 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
383
388
|
def test_pagination_offset_bad_param
|
384
389
|
Api::V2::BookResource.paginator :offset
|
385
390
|
get '/api/v2/books?page[irishsetter]=50&page[limit]=20'
|
386
|
-
|
391
|
+
assert_jsonapi_response 400
|
387
392
|
end
|
388
393
|
|
389
394
|
def test_pagination_related_resources_link
|
390
395
|
Api::V2::BookResource.paginator :offset
|
391
396
|
get '/api/v2/books?page[limit]=2'
|
392
|
-
|
397
|
+
assert_jsonapi_response 200
|
393
398
|
assert_equal 2, json_response['data'].size
|
394
399
|
assert_equal 'http://www.example.com/api/v2/books/1/book_comments',
|
395
400
|
json_response['data'][1]['relationships']['book_comments']['links']['related']
|
@@ -399,7 +404,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
399
404
|
Api::V2::BookResource.paginator :offset
|
400
405
|
Api::V2::BookCommentResource.paginator :offset
|
401
406
|
get '/api/v2/books/1/book_comments?page[limit]=10'
|
402
|
-
|
407
|
+
assert_jsonapi_response 200
|
403
408
|
assert_equal 10, json_response['data'].size
|
404
409
|
assert_equal 'This is comment 18 on book 1.', json_response['data'][9]['attributes']['body']
|
405
410
|
end
|
@@ -427,6 +432,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
427
432
|
end
|
428
433
|
|
429
434
|
def test_filter_related_resources
|
435
|
+
Api::V2::BookCommentResource.paginator :offset
|
430
436
|
JSONAPI.configuration.top_level_meta_include_record_count = true
|
431
437
|
get '/api/v2/books/1/book_comments?filter[book]=2'
|
432
438
|
assert_equal 0, json_response['meta']['record_count']
|
@@ -440,7 +446,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
440
446
|
Api::V2::BookResource.paginator :offset
|
441
447
|
Api::V2::BookCommentResource.paginator :offset
|
442
448
|
get '/api/v2/books/10/book_comments'
|
443
|
-
|
449
|
+
assert_jsonapi_response 200
|
444
450
|
assert_nil json_response['links']['next']
|
445
451
|
assert_equal 'http://www.example.com/api/v2/books/10/book_comments?page%5Blimit%5D=10&page%5Boffset%5D=0', json_response['links']['first']
|
446
452
|
assert_equal 'http://www.example.com/api/v2/books/10/book_comments?page%5Blimit%5D=10&page%5Boffset%5D=0', json_response['links']['last']
|
@@ -452,7 +458,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
452
458
|
JSONAPI.configuration.top_level_meta_include_record_count = true
|
453
459
|
|
454
460
|
get '/api/v2/books/1/aliased_comments'
|
455
|
-
|
461
|
+
assert_jsonapi_response 200
|
456
462
|
assert_equal 26, json_response['meta']['record_count']
|
457
463
|
ensure
|
458
464
|
JSONAPI.configuration = original_config
|
@@ -462,7 +468,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
462
468
|
Api::V2::BookResource.paginator :offset
|
463
469
|
Api::V2::BookCommentResource.paginator :offset
|
464
470
|
get '/api/v2/books/1/book_comments?page[limit]=10&include=author,book'
|
465
|
-
|
471
|
+
assert_jsonapi_response 200
|
466
472
|
assert_equal 10, json_response['data'].size
|
467
473
|
assert_equal 'This is comment 18 on book 1.', json_response['data'][9]['attributes']['body']
|
468
474
|
end
|
@@ -471,7 +477,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
471
477
|
Api::V2::BookResource.paginator :offset
|
472
478
|
Api::V2::BookCommentResource.paginator :offset
|
473
479
|
get '/api/v2/books?filter[id]=2000&page[limit]=10'
|
474
|
-
|
480
|
+
assert_jsonapi_response 200
|
475
481
|
assert_equal 0, json_response['data'].size
|
476
482
|
assert_nil json_response['links']['next']
|
477
483
|
assert_equal 'http://www.example.com/api/v2/books?filter%5Bid%5D=2000&page%5Blimit%5D=10&page%5Boffset%5D=0', json_response['links']['first']
|
@@ -482,7 +488,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
482
488
|
# Api::V2::BookResource.paginator :none
|
483
489
|
# Api::V2::BookCommentResource.paginator :none
|
484
490
|
# get '/api/v2/books?filter[]'
|
485
|
-
#
|
491
|
+
# assert_jsonapi_response 200
|
486
492
|
# assert_equal 10, json_response['data'].size
|
487
493
|
# assert_equal 'This is comment 18 on book 1.', json_response['data'][9]['attributes']['body']
|
488
494
|
# end
|
@@ -490,21 +496,21 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
490
496
|
|
491
497
|
def test_flow_self
|
492
498
|
get '/posts'
|
493
|
-
|
499
|
+
assert_jsonapi_response 200
|
494
500
|
post_1 = json_response['data'][0]
|
495
501
|
|
496
502
|
get post_1['links']['self']
|
497
|
-
|
503
|
+
assert_jsonapi_response 200
|
498
504
|
assert_hash_equals post_1, json_response['data']
|
499
505
|
end
|
500
506
|
|
501
507
|
def test_flow_link_to_one_self_link
|
502
508
|
get '/posts'
|
503
|
-
|
509
|
+
assert_jsonapi_response 200
|
504
510
|
post_1 = json_response['data'][0]
|
505
511
|
|
506
512
|
get post_1['relationships']['author']['links']['self']
|
507
|
-
|
513
|
+
assert_jsonapi_response 200
|
508
514
|
assert_hash_equals(json_response, {
|
509
515
|
'links' => {
|
510
516
|
'self' => 'http://www.example.com/posts/1/relationships/author',
|
@@ -516,11 +522,11 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
516
522
|
|
517
523
|
def test_flow_link_to_many_self_link
|
518
524
|
get '/posts'
|
519
|
-
|
525
|
+
assert_jsonapi_response 200
|
520
526
|
post_1 = json_response['data'][0]
|
521
527
|
|
522
528
|
get post_1['relationships']['tags']['links']['self']
|
523
|
-
|
529
|
+
assert_jsonapi_response 200
|
524
530
|
assert_hash_equals(json_response,
|
525
531
|
{
|
526
532
|
'links' => {
|
@@ -537,7 +543,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
537
543
|
|
538
544
|
def test_flow_link_to_many_self_link_put
|
539
545
|
get '/posts'
|
540
|
-
|
546
|
+
assert_jsonapi_response 200
|
541
547
|
post_1 = json_response['data'][4]
|
542
548
|
|
543
549
|
post post_1['relationships']['tags']['links']['self'],
|
@@ -547,7 +553,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
547
553
|
assert_equal 204, status
|
548
554
|
|
549
555
|
get post_1['relationships']['tags']['links']['self']
|
550
|
-
|
556
|
+
assert_jsonapi_response 200
|
551
557
|
assert_hash_equals(json_response,
|
552
558
|
{
|
553
559
|
'links' => {
|
@@ -565,12 +571,12 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
565
571
|
JSONAPI.configuration.route_format = :dasherized_route
|
566
572
|
JSONAPI.configuration.json_key_format = :dasherized_key
|
567
573
|
get '/api/v6/purchase-orders'
|
568
|
-
|
574
|
+
assert_jsonapi_response 200
|
569
575
|
po_1 = json_response['data'][0]
|
570
576
|
assert_equal 'purchase-orders', json_response['data'][0]['type']
|
571
577
|
|
572
578
|
get po_1['links']['self']
|
573
|
-
|
579
|
+
assert_jsonapi_response 200
|
574
580
|
assert_hash_equals po_1, json_response['data']
|
575
581
|
ensure
|
576
582
|
JSONAPI.configuration = original_config
|
@@ -581,13 +587,13 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
581
587
|
JSONAPI.configuration.route_format = :underscored_route
|
582
588
|
JSONAPI.configuration.json_key_format = :dasherized_key
|
583
589
|
get '/api/v7/purchase_orders'
|
584
|
-
|
590
|
+
assert_jsonapi_response 200
|
585
591
|
assert_equal 'purchase-orders', json_response['data'][0]['type']
|
586
592
|
|
587
593
|
po_1 = json_response['data'][0]
|
588
594
|
|
589
595
|
get po_1['links']['self']
|
590
|
-
|
596
|
+
assert_jsonapi_response 200
|
591
597
|
assert_hash_equals po_1, json_response['data']
|
592
598
|
ensure
|
593
599
|
JSONAPI.configuration = original_config
|
@@ -598,13 +604,13 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
598
604
|
JSONAPI.configuration.route_format = :underscored_route
|
599
605
|
JSONAPI.configuration.json_key_format = :underscored_key
|
600
606
|
get '/api/v7/purchase_orders'
|
601
|
-
|
607
|
+
assert_jsonapi_response 200
|
602
608
|
assert_equal 'purchase_orders', json_response['data'][0]['type']
|
603
609
|
|
604
610
|
po_1 = json_response['data'][0]
|
605
611
|
|
606
612
|
get po_1['links']['self']
|
607
|
-
|
613
|
+
assert_jsonapi_response 200
|
608
614
|
assert_hash_equals po_1, json_response['data']
|
609
615
|
ensure
|
610
616
|
JSONAPI.configuration = original_config
|
@@ -624,7 +630,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
624
630
|
}
|
625
631
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
626
632
|
|
627
|
-
|
633
|
+
assert_jsonapi_response 201
|
628
634
|
ensure
|
629
635
|
JSONAPI.configuration = original_config
|
630
636
|
end
|
@@ -643,7 +649,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
643
649
|
}
|
644
650
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
645
651
|
|
646
|
-
|
652
|
+
assert_jsonapi_response 201
|
647
653
|
ensure
|
648
654
|
JSONAPI.configuration = original_config
|
649
655
|
end
|
@@ -662,7 +668,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
662
668
|
}
|
663
669
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
664
670
|
|
665
|
-
|
671
|
+
assert_jsonapi_response 201
|
666
672
|
ensure
|
667
673
|
JSONAPI.configuration = original_config
|
668
674
|
end
|
@@ -681,7 +687,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
681
687
|
}
|
682
688
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
683
689
|
|
684
|
-
|
690
|
+
assert_jsonapi_response 400
|
685
691
|
ensure
|
686
692
|
JSONAPI.configuration = original_config
|
687
693
|
end
|
@@ -701,7 +707,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
701
707
|
}
|
702
708
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
703
709
|
|
704
|
-
|
710
|
+
assert_jsonapi_response 200
|
705
711
|
end
|
706
712
|
|
707
713
|
def test_patch_formatted_dasherized_links
|
@@ -724,7 +730,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
724
730
|
}
|
725
731
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
726
732
|
|
727
|
-
|
733
|
+
assert_jsonapi_response 200
|
728
734
|
ensure
|
729
735
|
JSONAPI.configuration = original_config
|
730
736
|
end
|
@@ -755,7 +761,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
755
761
|
}
|
756
762
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
757
763
|
|
758
|
-
|
764
|
+
assert_jsonapi_response 200
|
759
765
|
ensure
|
760
766
|
JSONAPI.configuration = original_config
|
761
767
|
end
|
@@ -788,7 +794,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
788
794
|
}
|
789
795
|
}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
790
796
|
|
791
|
-
|
797
|
+
assert_jsonapi_response 200
|
792
798
|
ensure
|
793
799
|
JSONAPI.configuration = original_config
|
794
800
|
$test_user = $original_test_user
|
@@ -884,13 +890,13 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
884
890
|
|
885
891
|
def test_include_parameter_allowed
|
886
892
|
get '/api/v2/books/1/book_comments?include=author'
|
887
|
-
|
893
|
+
assert_jsonapi_response 200
|
888
894
|
end
|
889
895
|
|
890
896
|
def test_include_parameter_not_allowed
|
891
897
|
JSONAPI.configuration.allow_include = false
|
892
898
|
get '/api/v2/books/1/book_comments?include=author'
|
893
|
-
|
899
|
+
assert_jsonapi_response 400
|
894
900
|
ensure
|
895
901
|
JSONAPI.configuration.allow_include = true
|
896
902
|
end
|
@@ -898,7 +904,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
898
904
|
def test_filter_parameter_not_allowed
|
899
905
|
JSONAPI.configuration.allow_filter = false
|
900
906
|
get '/api/v2/books?filter[author]=1'
|
901
|
-
|
907
|
+
assert_jsonapi_response 400
|
902
908
|
ensure
|
903
909
|
JSONAPI.configuration.allow_filter = true
|
904
910
|
end
|
@@ -906,21 +912,21 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
906
912
|
def test_sort_parameter_not_allowed
|
907
913
|
JSONAPI.configuration.allow_sort = false
|
908
914
|
get '/api/v2/books?sort=title'
|
909
|
-
|
915
|
+
assert_jsonapi_response 400
|
910
916
|
ensure
|
911
917
|
JSONAPI.configuration.allow_sort = true
|
912
918
|
end
|
913
919
|
|
914
920
|
def test_getting_different_resources_when_sti
|
915
921
|
get '/vehicles'
|
916
|
-
|
922
|
+
assert_jsonapi_response 200
|
917
923
|
types = json_response['data'].map{|r| r['type']}.sort
|
918
924
|
assert_array_equals ['boats', 'cars'], types
|
919
925
|
end
|
920
926
|
|
921
927
|
def test_getting_resource_with_correct_type_when_sti
|
922
928
|
get '/vehicles/1'
|
923
|
-
|
929
|
+
assert_jsonapi_response 200
|
924
930
|
assert_equal 'cars', json_response['data']['type']
|
925
931
|
end
|
926
932
|
end
|