Coverage for cluster / test_views.py: 98%

110 statements  

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

1from django.test import TestCase 

2 

3from .models import Model 

4from clustersoftware.models import Model as ClustersoftwareModel 

5from .forms import FormDisabled 

6from . import app_label 

7 

8from django.contrib.auth.models import User, Group 

9 

10from django.core.exceptions import ObjectDoesNotExist 

11 

12try: 

13 from django.urls import reverse 

14except Exception: # pragma: no cover 

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

16 

17from sm.utils import random_string 

18 

19 

20class Tester(TestCase): 

21 teststring = random_string() 

22 testitem = None 

23 password = random_string() 

24 fixtures = [ 

25 "sm/fixtures/02_groups.yaml", 

26 "%s/fixtures/01_initial.yaml" % "vendor", 

27 "%s/fixtures/01_initial.yaml" % "clustersoftware", 

28 "%s/fixtures/01_initial.yaml" % app_label, 

29 ] 

30 

31 def login(self): 

32 """ 

33 Login as user 

34 """ 

35 self.client.login(username=self.user.username, password=self.password) 

36 

37 def setUp(self): 

38 """ 

39 Create user 

40 Create some item in models for testing 

41 """ 

42 self.user = User.objects.create_superuser( 

43 username=random_string(), 

44 password=self.password, 

45 ) 

46 self.user.groups.set(Group.objects.all()) 

47 

48 self.clustersoftware = ( 

49 ClustersoftwareModel.objects.all().order_by("name").first() 

50 ) 

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

52 name=self.teststring, 

53 clustersoftware=self.clustersoftware, 

54 group=self.user.groups.first(), 

55 ) 

56 

57 def test_login_redir(self): 

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

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

60 

61 def test_listview(self): 

62 Model.objects.all().delete() 

63 self.setUp() 

64 self.login() 

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

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

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

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

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

70 self.assertEqual(item.clustersoftware.pk, self.clustersoftware.pk) 

71 

72 def test_detailview(self): 

73 self.login() 

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

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

76 response = self.client.get(url) 

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

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

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

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

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

82 self.assertIsInstance(form, FormDisabled) 

83 for field in ["name", "clustersoftware"]: 

84 self.assertTrue(form.fields[field].widget.attrs["disabled"]) 

85 

86 def test_updateview(self): 

87 self.login() 

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

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

90 response = self.client.post( 

91 url, 

92 { 

93 "name": self.testitem.name, 

94 "clustersoftware": self.testitem.clustersoftware.pk, 

95 }, 

96 ) 

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

98 

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

100 response = self.client.get(url) 

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

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

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

104 self.assertEqual(item.clustersoftware.name, self.clustersoftware.name) 

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

106 self.assertIsInstance(form, FormDisabled) 

107 for field in ["name", "clustersoftware"]: 

108 self.assertTrue(form.fields[field].widget.attrs["disabled"]) 

109 

110 def test_deleteview(self): 

111 self.login() 

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

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

114 response = self.client.get(url) 

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

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

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

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

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

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

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

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

123 

124 def test_deleteview_post(self): 

125 self.login() 

126 response = self.client.post( 

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

128 ) 

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

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

131 pass 

132 self.assertContains( 

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

134 ) 

135 with self.assertRaises(ObjectDoesNotExist): 

136 Model.objects.get( 

137 name=self.testitem.name, clustersoftware=self.clustersoftware 

138 ) 

139 

140 def test_createview(self): 

141 self.login() 

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

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

144 response = self.client.get(url) 

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

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

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

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

149 self.assertRaises( 

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

151 ) 

152 

153 def test_createview_post(self): 

154 # Make sure we have no objects in there 

155 Model.objects.all().delete() 

156 self.login() 

157 data = { 

158 "name": self.teststring, 

159 "clustersoftware": self.clustersoftware.pk, 

160 } 

161 response = self.client.post( 

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

163 data, 

164 follow=True, 

165 ) 

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

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

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

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

170 self.assertEqual(item.clustersoftware.pk, data["clustersoftware"]) 

171 

172 self.assertIsInstance(item, Model) 

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

174 "utf-8" 

175 ): 

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

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