1
1
import pytest
2
- from django .core .urlresolvers import reverse
2
+ from copy import deepcopy
3
+ from example import models , serializers , views
4
+ from example .tests .utils import dump_json , load_json
5
+ from rest_framework import status
3
6
4
- from example . tests . utils import load_json
7
+ from django . core . urlresolvers import reverse
5
8
6
- from example import models , serializers , views
7
9
pytestmark = pytest .mark .django_db
8
10
9
11
@@ -37,6 +39,24 @@ def _check_relationship_and_included_comment_type_are_the_same(django_client, ur
37
39
@pytest .mark .usefixtures ("single_entry" )
38
40
class TestModelResourceName :
39
41
42
+ create_data = {
43
+ 'data' : {
44
+ 'type' : 'resource_name_from_JSONAPIMeta' ,
45
+ 'id' : None ,
46
+ 'attributes' : {
47
+ 'body' : 'example' ,
48
+ },
49
+ 'relationships' : {
50
+ 'entry' : {
51
+ 'data' : {
52
+ 'type' : 'resource_name_from_JSONAPIMeta' ,
53
+ 'id' : 1
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }
59
+
40
60
def test_model_resource_name_on_list (self , client ):
41
61
models .Comment .__bases__ += (_PatchedModel ,)
42
62
response = client .get (reverse ("comment-list" ))
@@ -46,7 +66,7 @@ def test_model_resource_name_on_list(self, client):
46
66
'resource_name from model incorrect on list' )
47
67
48
68
# Precedence tests
49
- def test_resource_name_precendence (self , client ):
69
+ def test_resource_name_precendence (self , client , monkeypatch ):
50
70
# default
51
71
response = client .get (reverse ("comment-list" ))
52
72
data = load_json (response .content )['data' ][0 ]
@@ -61,29 +81,44 @@ def test_resource_name_precendence(self, client):
61
81
'resource_name from model incorrect on list' )
62
82
63
83
# serializer > model
64
- serializers .CommentSerializer .Meta . resource_name = " resource_name_from_serializer"
84
+ monkeypatch . setattr ( serializers .CommentSerializer .Meta , ' resource_name' , ' resource_name_from_serializer' , False )
65
85
response = client .get (reverse ("comment-list" ))
66
86
data = load_json (response .content )['data' ][0 ]
67
87
assert (data .get ('type' ) == 'resource_name_from_serializer' ), (
68
88
'resource_name from serializer incorrect on list' )
69
89
70
90
# view > serializer > model
71
- views .CommentViewSet . resource_name = 'resource_name_from_view'
91
+ monkeypatch . setattr ( views .CommentViewSet , ' resource_name' , 'resource_name_from_view' , False )
72
92
response = client .get (reverse ("comment-list" ))
73
93
data = load_json (response .content )['data' ][0 ]
74
94
assert (data .get ('type' ) == 'resource_name_from_view' ), (
75
95
'resource_name from view incorrect on list' )
76
96
97
+ def test_model_resource_name_create (self , client ):
98
+ models .Comment .__bases__ += (_PatchedModel ,)
99
+ models .Entry .__bases__ += (_PatchedModel ,)
100
+ response = client .post (reverse ("comment-list" ),
101
+ dump_json (self .create_data ),
102
+ content_type = 'application/vnd.api+json' )
103
+
104
+ assert response .status_code == status .HTTP_201_CREATED
105
+
106
+ def test_serializer_resource_name_create (self , client , monkeypatch ):
107
+ monkeypatch .setattr (serializers .CommentSerializer .Meta , 'resource_name' , 'renamed_comments' , False )
108
+ monkeypatch .setattr (serializers .EntrySerializer .Meta , 'resource_name' , 'renamed_entries' , False )
109
+ create_data = deepcopy (self .create_data )
110
+ create_data ['data' ]['type' ] = 'renamed_comments'
111
+ create_data ['data' ]['relationships' ]['entry' ]['data' ]['type' ] = 'renamed_entries'
112
+
113
+ response = client .post (reverse ("comment-list" ),
114
+ dump_json (create_data ),
115
+ content_type = 'application/vnd.api+json' )
116
+
117
+ assert response .status_code == status .HTTP_201_CREATED
118
+
77
119
def teardown_method (self , method ):
78
120
models .Comment .__bases__ = (models .Comment .__bases__ [0 ],)
79
- try :
80
- delattr (serializers .CommentSerializer .Meta , "resource_name" )
81
- except AttributeError :
82
- pass
83
- try :
84
- delattr (views .CommentViewSet , "resource_name" )
85
- except AttributeError :
86
- pass
121
+ models .Entry .__bases__ = (models .Entry .__bases__ [0 ],)
87
122
88
123
89
124
@pytest .mark .usefixtures ("single_entry" )
0 commit comments