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
- from example .models import Blog
8
+ from example .models import Author , Blog
9
9
10
10
11
11
# serializers
@@ -30,6 +30,9 @@ class EntrySerializer(serializers.Serializer):
30
30
comment = CommentSerializer (required = False )
31
31
headline = serializers .CharField (allow_null = True , required = True )
32
32
body_text = serializers .CharField ()
33
+ author = serializers .ResourceRelatedField (
34
+ queryset = Author .objects .all (), required = False
35
+ )
33
36
34
37
def validate (self , attrs ):
35
38
body_text = attrs ["body_text" ]
@@ -40,13 +43,12 @@ def validate(self, attrs):
40
43
41
44
42
45
# view
43
- class DummyTestView (views . APIView ):
46
+ class DummyTestView (generics . CreateAPIView ):
44
47
serializer_class = EntrySerializer
45
48
resource_name = "entries"
46
49
47
- def post (self , request , * args , ** kwargs ):
48
- serializer = self .serializer_class (data = request .data )
49
- serializer .is_valid (raise_exception = True )
50
+ def get_serializer_context (self ):
51
+ return {}
50
52
51
53
52
54
urlpatterns = [
@@ -191,3 +193,21 @@ def test_many_third_level_dict_errors(client, some_blog, snapshot):
191
193
}
192
194
193
195
snapshot .assert_match (perform_error_test (client , data ))
196
+
197
+
198
+ def test_relationship_errors_has_correct_pointers (client , some_blog , snapshot ):
199
+ data = {
200
+ "data" : {
201
+ "type" : "entries" ,
202
+ "attributes" : {
203
+ "blog" : some_blog .pk ,
204
+ "bodyText" : "body_text" ,
205
+ "headline" : "headline" ,
206
+ },
207
+ "relationships" : {
208
+ "author" : {"data" : {"id" : "INVALID_ID" , "type" : "authors" }}
209
+ },
210
+ }
211
+ }
212
+
213
+ snapshot .assert_match (perform_error_test (client , data ))
0 commit comments