44from example .tests .utils import load_json
55
66from rest_framework .test import APITestCase
7- from example import models , serializers
7+ from example import models , serializers , views
88pytestmark = pytest .mark .django_db
99
1010
@@ -13,17 +13,61 @@ class JSONAPIMeta:
1313 resource_name = "resource_name_from_JSONAPIMeta"
1414
1515
16- def test_match_model_resource_name_on_list (single_entry , client ):
17- models .Comment .__bases__ += (_PatchedModel ,)
18- response = client .get (reverse ("comment-list" ))
19- data = load_json (response .content )['data' ]
20- # name should be super-author instead of model name RenamedAuthor
21- assert [x .get ('type' ) for x in data ] == ['resource_name_from_JSONAPIMeta' ], 'List included types are incorrect'
16+ @pytest .mark .usefixtures ("single_entry" )
17+ class ModelResourceNameTests (APITestCase ):
18+ def test_model_resource_name_on_list (self ):
19+ models .Comment .__bases__ += (_PatchedModel ,)
20+ response = self .client .get (reverse ("comment-list" ))
21+ data = load_json (response .content )['data' ][0 ]
22+ # name should be super-author instead of model name RenamedAuthor
23+ assert (data .get ('type' ) == 'resource_name_from_JSONAPIMeta' ), (
24+ 'resource_name from model incorrect on list' )
25+
26+ # Precedence tests
27+ def test_resource_name_precendence (self ):
28+ # default
29+ response = self .client .get (reverse ("comment-list" ))
30+ data = load_json (response .content )['data' ][0 ]
31+ assert (data .get ('type' ) == 'comments' ), (
32+ 'resource_name from model incorrect on list' )
33+
34+ # model > default
35+ models .Comment .__bases__ += (_PatchedModel ,)
36+ response = self .client .get (reverse ("comment-list" ))
37+ data = load_json (response .content )['data' ][0 ]
38+ assert (data .get ('type' ) == 'resource_name_from_JSONAPIMeta' ), (
39+ 'resource_name from model incorrect on list' )
40+
41+ # serializer > model
42+ serializers .CommentSerializer .Meta .resource_name = "resource_name_from_serializer"
43+ response = self .client .get (reverse ("comment-list" ))
44+ data = load_json (response .content )['data' ][0 ]
45+ assert (data .get ('type' ) == 'resource_name_from_serializer' ), (
46+ 'resource_name from serializer incorrect on list' )
47+
48+ # view > serializer > model
49+ views .CommentViewSet .resource_name = 'resource_name_from_view'
50+ response = self .client .get (reverse ("comment-list" ))
51+ data = load_json (response .content )['data' ][0 ]
52+ assert (data .get ('type' ) == 'resource_name_from_view' ), (
53+ 'resource_name from view incorrect on list' )
54+
55+ def tearDown (self ):
56+ models .Comment .__bases__ = (models .Comment .__bases__ [0 ],)
57+ try :
58+ delattr (serializers .CommentSerializer .Meta , "resource_name" )
59+ except AttributeError :
60+ pass
61+ try :
62+ delattr (views .CommentViewSet , "resource_name" )
63+ except AttributeError :
64+ pass
2265
2366
2467@pytest .mark .usefixtures ("single_entry" )
2568class ResourceNameConsistencyTest (APITestCase ):
2669
70+ # Included rename tests
2771 def test_type_match_on_included_and_inline_base (self ):
2872 self ._check_relationship_and_included_comment_type_are_the_same (reverse ("entry-list" ))
2973
@@ -43,6 +87,7 @@ def test_type_match_on_included_and_inline_with_serializer_resource_name_and_JSO
4387
4488 self ._check_relationship_and_included_comment_type_are_the_same (reverse ("entry-list" ))
4589
90+ # Relation rename tests
4691 def test_resource_and_relationship_type_match (self ):
4792 self ._check_resource_and_relationship_comment_type_match ()
4893
0 commit comments