1
1
import pytest
2
2
from django .test import override_settings
3
3
from django .urls import path , reverse
4
- from rest_framework import views
4
+ from rest_framework import generics
5
5
6
6
from rest_framework_json_api import serializers
7
7
8
8
from example .models import Blog
9
9
10
10
11
+ class AuthorModelMock :
12
+ __name__ = "author"
13
+
14
+ @property
15
+ def model (self ):
16
+ return self
17
+
18
+ @property
19
+ def queryset (self ):
20
+ return self
21
+
22
+ def create (self , * args , ** kwargs ):
23
+ pass
24
+
25
+ def get (self , pk ):
26
+ if isinstance (pk , int ):
27
+ return self
28
+ raise TypeError ("pk must be integer" )
29
+
30
+
11
31
# serializers
12
32
class CommentAttachmentSerializer (serializers .Serializer ):
13
33
data = serializers .CharField (allow_null = False , required = True )
@@ -30,6 +50,9 @@ class EntrySerializer(serializers.Serializer):
30
50
comment = CommentSerializer (required = False )
31
51
headline = serializers .CharField (allow_null = True , required = True )
32
52
body_text = serializers .CharField ()
53
+ author = serializers .ResourceRelatedField (
54
+ queryset = AuthorModelMock ().queryset , required = False
55
+ )
33
56
34
57
def validate (self , attrs ):
35
58
body_text = attrs ["body_text" ]
@@ -40,13 +63,12 @@ def validate(self, attrs):
40
63
41
64
42
65
# view
43
- class DummyTestView (views . APIView ):
66
+ class DummyTestView (generics . CreateAPIView ):
44
67
serializer_class = EntrySerializer
45
68
resource_name = "entries"
46
69
47
- def post (self , request , * args , ** kwargs ):
48
- serializer = self .serializer_class (data = request .data )
49
- serializer .is_valid (raise_exception = True )
70
+ def get_serializer_context (self ):
71
+ return {}
50
72
51
73
52
74
urlpatterns = [
@@ -191,3 +213,21 @@ def test_many_third_level_dict_errors(client, some_blog, snapshot):
191
213
}
192
214
193
215
snapshot .assert_match (perform_error_test (client , data ))
216
+
217
+
218
+ def test_relationship_errors_has_correct_pointers (client , some_blog , snapshot ):
219
+ data = {
220
+ "data" : {
221
+ "type" : "entries" ,
222
+ "attributes" : {
223
+ "blog" : some_blog .pk ,
224
+ "bodyText" : "body_text" ,
225
+ "headline" : "headline" ,
226
+ },
227
+ "relationships" : {
228
+ "author" : {"data" : {"id" : "INVALID_ID" , "type" : "authors" }}
229
+ },
230
+ }
231
+ }
232
+
233
+ snapshot .assert_match (perform_error_test (client , data ))
0 commit comments