4
4
from example .tests .utils import load_json
5
5
6
6
from rest_framework .test import APITestCase
7
- from example import models , serializers
7
+ from example import models , serializers , views
8
8
pytestmark = pytest .mark .django_db
9
9
10
10
@@ -13,17 +13,58 @@ class JSONAPIMeta:
13
13
resource_name = "resource_name_from_JSONAPIMeta"
14
14
15
15
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 model 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
+ delattr (views .CommentViewSet , "resource_name" )
60
+ except AttributeError :
61
+ pass
22
62
23
63
24
64
@pytest .mark .usefixtures ("single_entry" )
25
65
class ResourceNameConsistencyTest (APITestCase ):
26
66
67
+ # Included rename tests
27
68
def test_type_match_on_included_and_inline_base (self ):
28
69
self ._check_relationship_and_included_comment_type_are_the_same (reverse ("entry-list" ))
29
70
@@ -43,6 +84,7 @@ def test_type_match_on_included_and_inline_with_serializer_resource_name_and_JSO
43
84
44
85
self ._check_relationship_and_included_comment_type_are_the_same (reverse ("entry-list" ))
45
86
87
+ # Relation rename tests
46
88
def test_resource_and_relationship_type_match (self ):
47
89
self ._check_resource_and_relationship_comment_type_match ()
48
90
0 commit comments