Skip to content

Commit 81cae9e

Browse files
committed
Added tests
1 parent a210e63 commit 81cae9e

File tree

1 file changed

+87
-2
lines changed

1 file changed

+87
-2
lines changed

example/tests/test_views.py

+87-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@
22

33
from django.test import RequestFactory
44
from django.utils import timezone
5+
from rest_framework.exceptions import NotFound
6+
from rest_framework.request import Request
57
from rest_framework.reverse import reverse
6-
from rest_framework.test import APITestCase, force_authenticate
8+
from rest_framework.test import APIRequestFactory, APITestCase, force_authenticate
79

10+
from example.factories import AuthorFactory, EntryFactory
11+
from example.models import Author, Blog, Comment, Entry
12+
from example.serializers import AuthorBioSerializer, EntrySerializer
13+
from example.views import AuthorViewSet
814
from rest_framework_json_api.utils import format_resource_type
915

1016
from . import TestBase
1117
from .. import views
12-
from example.models import Author, Blog, Comment, Entry
1318

1419

1520
class TestRelationshipView(APITestCase):
@@ -225,6 +230,86 @@ def test_delete_to_many_relationship_with_change(self):
225230
assert response.status_code == 200, response.content.decode()
226231

227232

233+
class TestRelatedMixin(APITestCase):
234+
235+
def setUp(self):
236+
self.author = AuthorFactory()
237+
238+
def _get_view(self, kwargs):
239+
factory = APIRequestFactory()
240+
request = Request(factory.get('', content_type='application/vnd.api+json'))
241+
return AuthorViewSet(request=request, kwargs=kwargs)
242+
243+
def test_get_related_field_name(self):
244+
kwargs = {'pk': self.author.id, 'related_field': 'bio'}
245+
view = self._get_view(kwargs)
246+
got = view.get_related_field_name()
247+
self.assertEqual(got, kwargs['related_field'])
248+
249+
def test_get_related_instance_serializer_field(self):
250+
kwargs = {'pk': self.author.id, 'related_field': 'bio'}
251+
view = self._get_view(kwargs)
252+
got = view.get_related_instance()
253+
self.assertEqual(got, self.author.bio)
254+
255+
def test_get_related_instance_model_field(self):
256+
kwargs = {'pk': self.author.id, 'related_field': 'id'}
257+
view = self._get_view(kwargs)
258+
got = view.get_related_instance()
259+
self.assertEqual(got, self.author.id)
260+
261+
def test_get_serializer_class(self):
262+
kwargs = {'pk': self.author.id, 'related_field': 'bio'}
263+
view = self._get_view(kwargs)
264+
got = view.get_serializer_class()
265+
self.assertEqual(got, AuthorBioSerializer)
266+
267+
def test_get_serializer_class_many(self):
268+
kwargs = {'pk': self.author.id, 'related_field': 'entries'}
269+
view = self._get_view(kwargs)
270+
got = view.get_serializer_class()
271+
self.assertEqual(got, EntrySerializer)
272+
273+
def test_get_serializer_class_raises_error(self):
274+
kwargs = {'pk': self.author.id, 'related_field': 'type'}
275+
view = self._get_view(kwargs)
276+
self.assertRaises(NotFound, view.get_serializer_class)
277+
278+
def test_retrieve_related_single(self):
279+
url = reverse('author-related', kwargs={'pk': self.author.pk, 'related_field': 'bio'})
280+
resp = self.client.get(url)
281+
expected = {
282+
'data': {
283+
'type': 'authorBios', 'id': str(self.author.bio.id),
284+
'relationships': {
285+
'author': {'data': {'type': 'authors', 'id': str(self.author.id)}}},
286+
'attributes': {
287+
'body': str(self.author.bio.body)
288+
},
289+
}
290+
}
291+
self.assertEqual(resp.status_code, 200)
292+
self.assertEqual(resp.json(), expected)
293+
294+
def test_retrieve_related_many(self):
295+
entry = EntryFactory(authors=self.author)
296+
url = reverse('author-related', kwargs={'pk': self.author.pk, 'related_field': 'entries'})
297+
resp = self.client.get(url)
298+
299+
self.assertEqual(resp.status_code, 200)
300+
self.assertTrue(isinstance(resp.json()['data'], list))
301+
self.assertEqual(len(resp.json()['data']), 1)
302+
self.assertEqual(resp.json()['data'][0]['id'], str(entry.id))
303+
304+
def test_retrieve_related_None(self):
305+
kwargs = {'pk': self.author.pk, 'related_field': 'first_entry'}
306+
url = reverse('author-related', kwargs=kwargs)
307+
resp = self.client.get(url)
308+
309+
self.assertEqual(resp.status_code, 200)
310+
self.assertEqual(resp.json(), {'data': None})
311+
312+
228313
class TestValidationErrorResponses(TestBase):
229314
def test_if_returns_error_on_empty_post(self):
230315
view = views.BlogViewSet.as_view({'post': 'create'})

0 commit comments

Comments
 (0)