Coverage for patchtime / test_views.py: 97%

99 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 item = response.context[-1]["object_list"].first() 

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

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

54 

55 def test_detailview(self): 

56 self.login() 

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

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

59 response = self.client.get(url) 

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

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

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

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

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

65 self.assertIsInstance(form, FormDisabled) 

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

67 

68 def test_updateview(self): 

69 self.login() 

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

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

72 response = self.client.get(url) 

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

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

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

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

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

78 self.assertIsInstance(form, Form) 

79 self.assertRaises( 

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

81 ) 

82 

83 def test_deleteview(self): 

84 self.login() 

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

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

87 response = self.client.get(url) 

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

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

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

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

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

93 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}") 

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

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

96 

97 def test_deleteview_post(self): 

98 self.login() 

99 response = self.client.post( 

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

101 ) 

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

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

104 pass 

105 if ( 

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

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

108 ): 

109 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}") 

110 self.assertContains( 

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

112 ) 

113 with self.assertRaises(ObjectDoesNotExist): 

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

115 

116 def test_createview(self): 

117 self.login() 

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

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

120 response = self.client.get(url) 

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

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

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

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

125 self.assertRaises( 

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

127 ) 

128 

129 def test_createview_post(self): 

130 # Make sure we have no objects in there 

131 Model.objects.all().delete() 

132 self.login() 

133 data = { 

134 "name": self.teststring, 

135 } 

136 response = self.client.post( 

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

138 data, 

139 follow=True, 

140 ) 

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

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

143 item = response.context[-1]["object_list"].first() 

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

145 self.assertIsInstance(item, Model) 

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

147 "utf-8" 

148 ): 

149 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}") 

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