Coverage for status / test_views.py: 97%

101 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-24 12:43 +0000

1from django.test import TestCase 

2 

3 

4from .models import Model 

5from .forms import FormDisabled 

6from .forms import Form 

7from . import app_label 

8 

9from django.contrib.auth.models import User 

10 

11from django.core.exceptions import ObjectDoesNotExist 

12 

13try: 

14 from django.urls import reverse 

15except Exception: # pragma: no cover 

16 from django.urls import reverse # pragma: no cover 

17 

18from sm.utils import random_string 

19 

20 

21class Tester(TestCase): 

22 teststring = random_string() 

23 testitem = None 

24 

25 def login(self): 

26 """ 

27 Login as user 'john' 

28 """ 

29 self.client.login(username="john", password="johnpassword") 

30 

31 def setUp(self): 

32 """ 

33 Create user 

34 Create some item in models for testing 

35 """ 

36 self.user = User.objects.create_superuser( 

37 "john", "lennon@thebeatles.com", "johnpassword" 

38 ) 

39 self.testitem, created = Model.objects.get_or_create( 

40 name=self.teststring, 

41 ) 

42 

43 def test_login_redir(self): 

44 response = self.client.get(reverse("%s:index" % app_label)) 

45 self.assertEqual(response.status_code, 302, "no redirect?") 

46 

47 def test_listview(self): 

48 self.login() 

49 response = self.client.get(reverse("%s:index" % app_label)) 

50 self.assertEqual(response.status_code, 200, "no status 200?") 

51 objs = response.context[-1]["object_list"] 

52 item = objs.first() 

53 self.assertIsInstance(item, Model, "object not the correct model!?") 

54 self.assertEqual(item.name, self.teststring) 

55 

56 def test_detailview(self): 

57 self.login() 

58 url = reverse("%s:detail" % app_label, args=[self.testitem.pk]) 

59 self.assertEqual("/%s/detail/%i/" % (app_label, self.testitem.pk), url) 

60 response = self.client.get(url) 

61 self.assertEqual(response.status_code, 200, "no status 200?") 

62 item = response.context[-1]["object"] 

63 self.assertIsInstance(item, Model, "object not the correct model!?") 

64 self.assertEqual(item.name, self.teststring) 

65 form = response.context[-1]["form"] 

66 self.assertIsInstance(form, FormDisabled) 

67 self.assertTrue(form.fields["name"].widget.attrs["disabled"]) 

68 

69 def test_updateview(self): 

70 self.login() 

71 url = reverse("%s:update" % app_label, args=[self.testitem.pk]) 

72 self.assertEqual("/%s/update/%i/" % (app_label, self.testitem.pk), url) 

73 response = self.client.get(url) 

74 self.assertEqual(response.status_code, 200, "no status 200?") 

75 item = response.context[-1]["object"] 

76 self.assertIsInstance(item, Model, "object not the correct model!?") 

77 self.assertEqual(item.name, self.teststring) 

78 form = response.context[-1]["form"] 

79 self.assertIsInstance(form, Form) 

80 self.assertRaises( 

81 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled" 

82 ) 

83 

84 def test_deleteview(self): 

85 self.login() 

86 url = reverse("%s:delete" % app_label, args=[self.testitem.pk]) 

87 self.assertEqual("/%s/delete/%i/" % (app_label, self.testitem.pk), url) 

88 response = self.client.get(url) 

89 self.assertEqual(response.status_code, 200, "no status 200?") 

90 item = response.context[-1]["object"] 

91 self.assertIsInstance(item, Model, "object not the correct model!?") 

92 self.assertEqual(item.name, self.teststring) 

93 if "Are you sure you want to" not in response.content.decode("utf-8"): 

94 print("Message not found") 

95 self.assertContains(response, "Are you sure you want to delete") 

96 self.assertContains(response, "Confirm Delete") 

97 

98 def test_deleteview_post(self): 

99 self.login() 

100 response = self.client.post( 

101 reverse("%s:delete" % app_label, args=[self.testitem.pk]), follow=True 

102 ) 

103 self.assertEqual(response.status_code, 200, "no status 200?") 

104 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302) 

105 pass 

106 

107 if ( 

108 "%s was deleted successfully" % self.testitem.name 

109 not in response.content.decode("utf-8") 

110 ): 

111 print("Message not found") 

112 self.assertContains( 

113 response, "%s was deleted successfully" % self.testitem.name 

114 ) 

115 with self.assertRaises(ObjectDoesNotExist): 

116 Model.objects.get(name=self.testitem.name) 

117 

118 def test_createview(self): 

119 self.login() 

120 url = reverse("%s:create" % app_label) 

121 self.assertEqual("/%s/create" % app_label, url) 

122 response = self.client.get(url) 

123 self.assertEqual(response.status_code, 200, "no status 200?") 

124 self.assertRaises(KeyError, response.context[-1].__getitem__, "object") 

125 self.assertIn("form", response.context[-1]) 

126 form = response.context[-1]["form"] 

127 self.assertRaises( 

128 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled" 

129 ) 

130 

131 def test_createview_post(self): 

132 # Make sure we have no objects in there 

133 Model.objects.all().delete() 

134 self.login() 

135 data = { 

136 "name": self.teststring, 

137 } 

138 response = self.client.post( 

139 reverse("%s:create" % app_label), 

140 data, 

141 follow=True, 

142 ) 

143 self.assertEqual(response.status_code, 200, "no status 200?") 

144 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302) 

145 objs = response.context[-1]["object_list"] 

146 item = objs.first() 

147 self.assertEqual(item.name, data["name"]) 

148 self.assertIsInstance(item, Model) 

149 if "%s was created successfully" % data["name"] not in response.content.decode( 

150 "utf-8" 

151 ): 

152 print("Message not found") 

153 self.assertContains(response, "%s was created successfully" % data["name"])