Coverage for apis/tests/test_views.py: 100.00%

25 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-14 19:27 -0700

1from django.contrib.auth import get_user_model 

2from django.urls import reverse 

3from rest_framework import status 

4from rest_framework.test import APITestCase 

5 

6from books.models import Book 

7 

8 

9class APITests(APITestCase): 

10 @classmethod 

11 def setUpTestData(cls): 

12 cls.book = Book.objects.create( 

13 title="Django for APIs", 

14 subtitle="Build web APIs with Python and Django", 

15 author="William S. Vincent", 

16 pages="200", 

17 publisher="Lean Publishing", 

18 pubdate="2022-04-01", 

19 price="29.99", 

20 isbn="9781735467221", 

21 ) 

22 cls.user = get_user_model().objects.create_user( 

23 username="bookreader", 

24 password="T3stP@s5123", 

25 ) 

26 

27 def test_api_listview(self): 

28 self.client.login(username="bookreader", password="T3stP@s5123") 1b

29 response = self.client.get(reverse("book_list")) 1b

30 self.assertEqual(response.status_code, status.HTTP_200_OK) 1b

31 self.assertEqual(Book.objects.count(), 1) 1b

32 self.assertContains(response, self.book) 1b

33 

34 def test_api_logged_out_deny_listview_access(self): 

35 response = self.client.get(reverse("book_list")) 1d

36 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 1d

37 

38 def test_api_detailview(self): 

39 self.client.login(username="bookreader", password="T3stP@s5123") 1c

40 response = self.client.get( 1c

41 reverse("book_detail", kwargs={"pk": self.book.id}), format="json" 

42 ) 

43 self.assertEqual(response.status_code, status.HTTP_200_OK) 1c

44 self.assertEqual(Book.objects.count(), 1) 1c

45 self.assertContains(response, "Build web APIs") 1c