Coverage for clusterpackage / test_views.py: 98%

122 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 cluster.models import Model as ClusterModel 

6from status.models import Model as StatusModel 

7from clusterpackagetype.models import Model as ClusterpackagetypeModel 

8from .forms import FormDisabled 

9from .forms import Form 

10from . import app_label 

11 

12from django.contrib.auth.models import User 

13 

14from django.core.exceptions import ObjectDoesNotExist 

15 

16try: 

17 from django.urls import reverse 

18except Exception: # pragma: no cover 

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

20 

21 

22from sm.utils import random_string 

23 

24 

25class Tester(TestCase): 

26 testitem = None 

27 password = random_string() 

28 testdescription = "%s" % random_string() 

29 testhost = "%s" % random_string() 

30 teststring = random_string() 

31 fixtures = [ 

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

33 "%s/fixtures/01_initial.yaml" % "servermodel", 

34 "%s/fixtures/01_initial.yaml" % "status", 

35 "%s/fixtures/01_initial.yaml" % "domain", 

36 "%s/fixtures/01_initial.yaml" % "patchtime", 

37 "%s/fixtures/01_initial.yaml" % "operatingsystem", 

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

39 "%s/fixtures/01_initial.yaml" % "cluster", 

40 "%s/fixtures/01_initial.yaml" % "clusterpackagetype", 

41 ] 

42 

43 def login(self): 

44 """ 

45 Login as user 

46 """ 

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

48 

49 def setUp(self): 

50 """ 

51 Create user 

52 Create some item in models for testing 

53 """ 

54 self.user = User.objects.create_superuser( 

55 username=random_string(), 

56 password=self.password, 

57 ) 

58 

59 self.status = StatusModel.objects.all().first() 

60 self.cluster = ClusterModel.objects.all().first() 

61 self.package_type = ClusterpackagetypeModel.objects.all().first() 

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

63 name=self.teststring, 

64 cluster=self.cluster, 

65 package_type=self.package_type, 

66 status=self.status, 

67 description=self.testdescription, 

68 host=self.testhost, 

69 ) 

70 

71 def test_login_redir(self): 

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

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

74 

75 def test_listview(self): 

76 Model.objects.all().delete() 

77 self.setUp() 

78 self.login() 

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

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

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

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

83 self.assertEqual(item.description, self.testdescription) 

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

85 self.assertEqual(item.cluster.name, self.cluster.name) 

86 

87 def test_detailview(self): 

88 self.login() 

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

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

91 response = self.client.get(url) 

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

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

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

95 self.assertEqual(item.description, self.testdescription) 

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

97 self.assertEqual(item.cluster.name, self.cluster.name) 

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

99 self.assertIsInstance(form, FormDisabled) 

100 for field in ["name", "description", "cluster", "status"]: 

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

102 

103 def test_updateview(self): 

104 self.login() 

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

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

107 response = self.client.get(url) 

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

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

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

111 self.assertEqual(item.description, self.testdescription) 

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

113 self.assertEqual(item.cluster.name, self.cluster.name) 

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

115 self.assertIsInstance(form, Form) 

116 for field in ["name", "description", "status", "cluster"]: 

117 self.assertRaises( 

118 KeyError, form.fields[field].widget.attrs.__getitem__, "disabled" 

119 ) 

120 

121 def test_deleteview(self): 

122 self.login() 

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

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

125 response = self.client.get(url) 

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

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

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

129 self.assertEqual(item.description, self.testdescription) 

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

131 self.assertEqual(item.cluster.name, self.cluster.name) 

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

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

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

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

136 

137 def test_deleteview_post(self): 

138 self.login() 

139 response = self.client.post( 

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

141 ) 

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

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

144 pass 

145 self.assertContains( 

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

147 ) 

148 with self.assertRaises(ObjectDoesNotExist): 

149 Model.objects.get( 

150 name=self.testitem.name, 

151 cluster=self.cluster, 

152 ) 

153 

154 def test_createview(self): 

155 self.login() 

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

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

158 response = self.client.get(url) 

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

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

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

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

163 self.assertRaises( 

164 KeyError, form.fields["description"].widget.attrs.__getitem__, "disabled" 

165 ) 

166 

167 def test_createview_post(self): 

168 # Make sure we have no objects in there 

169 Model.objects.all().delete() 

170 self.login() 

171 data = { 

172 "name": self.teststring, 

173 "cluster": self.cluster.pk, 

174 "package_type": self.package_type.pk, 

175 "status": self.status.pk, 

176 "description": self.testdescription, 

177 "host": self.testhost, 

178 } 

179 response = self.client.post( 

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

181 data, 

182 follow=True, 

183 ) 

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

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

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

187 self.assertEqual(item.description, data["description"]) 

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

189 self.assertEqual(item.cluster.pk, data["cluster"]) 

190 self.assertEqual(item.cluster.name, self.cluster.name) 

191 

192 self.assertIsInstance(item, Model) 

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

194 "utf-8" 

195 ): 

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

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