Coverage for pages/tests/test_views.py: 97.33%

75 statements  

« prev     ^ index     » next       coverage.py v7.8.2, created at 2025-06-08 13:12 -0700

1from django.core.mail import BadHeaderError 

2from django.test import SimpleTestCase 

3from django.urls import resolve, reverse 

4 

5from ..views import ( 

6 AboutPageView, 

7 ContactView, 

8 HomePageView, 

9 SuccessView, 

10) 

11 

12 

13class HomePageTests(SimpleTestCase): 

14 def setUp(self): 

15 url = reverse("home") 

16 self.response = self.client.get(url) 

17 

18 def test_homepage_status_code(self): 

19 self.assertEqual(self.response.status_code, 200) 1h

20 

21 def test_homepage_template(self): 

22 self.assertTemplateUsed(self.response, "pages/home.html") 1i

23 

24 def test_homepage_contains_correct_html(self): 

25 self.assertContains(self.response, "Django Polls app") 1j

26 

27 def test_homepage_does_not_contain_incorrect_html(self): 

28 self.assertNotContains(self.response, "Not the Homepage") 1k

29 

30 def test_homepage_url_resolves_homepageview(self): 

31 view = resolve("/") 1c

32 self.assertEqual( 1c

33 view.func.__name__, 

34 HomePageView.as_view().__name__, 

35 ) 

36 

37 

38class AboutPageTests(SimpleTestCase): 

39 def setUp(self): 

40 url = reverse("about") 

41 self.response = self.client.get(url) 

42 

43 def test_about_page_status_code(self): 

44 self.assertEqual(self.response.status_code, 200) 1l

45 

46 def test_about_page_template(self): 

47 self.assertTemplateUsed(self.response, "pages/about.html") 1m

48 

49 def test_about_page_contains_correct_html(self): 

50 self.assertContains(self.response, "About Page") 1n

51 

52 def test_about_page_does_not_contain_incorrect_html(self): 

53 self.assertNotContains(self.response, "Not the About page") 1o

54 

55 def test_about_page_url_resolves_about_pageview(self): 

56 view = resolve("/about/") 1d

57 self.assertEqual( 1d

58 view.func.__name__, 

59 AboutPageView.as_view().__name__, 

60 ) 

61 

62 

63class ContactViewTests(SimpleTestCase): 

64 def setUp(self): 

65 url = reverse("contact") 

66 self.response = self.client.get(url) 

67 

68 def test_contact_page_status_code(self): 

69 self.assertEqual(self.response.status_code, 200) 1p

70 

71 def test_contact_page_url_resolves_contactpageview(self): 

72 view = resolve("/contact/") 1e

73 self.assertEqual( 1e

74 view.func.__name__, 

75 ContactView.__name__, 

76 ) 

77 

78 def test_contact_page_template(self): 

79 self.assertTemplateUsed(self.response, "pages/contact.html") 1q

80 

81 def test_contact_page_contains_correct_html(self): 

82 self.assertContains(self.response, "Contact Us") 1r

83 

84 def test_contact_page_does_not_contain_incorrect_html(self): 

85 self.assertNotContains(self.response, "Home Page") 1s

86 

87 def test_post_success(self): 

88 self.client.post( 1f

89 "/contact/", 

90 data={ 

91 "from_email": "john@example.com", 

92 "subject": "Test Email", 

93 "messages": "This is a test", 

94 }, 

95 ) 

96 self.assertEqual(self.response.status_code, 200) 1f

97 

98 def test_header_injection(self): 

99 error_occured = True 1b

100 try: 1b

101 self.client.post( 1b

102 "/contact/", 

103 data={ 

104 "from_email": "joe@example.com", 

105 "subject": "Subject\nInjectionTest", 

106 "message": "This is a test of a BadHeaderError", 

107 }, 

108 ) 

109 error_occured = False 1b

110 except BadHeaderError: 

111 error_occured = True 

112 self.assertFalse(error_occured) 1b

113 

114 

115class SuccessViewTests(SimpleTestCase): 

116 def setUp(self): 

117 url = reverse("success") 

118 self.response = self.client.get(url) 

119 

120 def test_success_page_status_code(self): 

121 self.assertEqual(self.response.status_code, 200) 1t

122 

123 def test_success_page_template(self): 

124 self.assertTemplateUsed(self.response, "pages/success.html") 1u

125 

126 def test_success_page_contains_correct_html(self): 

127 self.assertContains( 1v

128 self.response, 

129 "Thank you for your message.", 

130 ) 

131 

132 def test_success_page_does_not_contain_incorrect_html(self): 

133 self.assertNotContains(self.response, "Please Go Away") 1w

134 

135 def test_success_page_url_resolves_success_page_view(self): 

136 view = resolve("/success/") 1g

137 self.assertEqual( 1g

138 view.func.__name__, 

139 SuccessView.__name__, 

140 )