Coverage for operatingsystem / test_views.py: 100%

121 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 vendor.models import Model as VendorModel 

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 

13from django.urls import reverse 

14 

15 

16from sm.utils import random_string 

17 

18 

19class Tester(TestCase): 

20 teststring = random_string() 

21 testitem = None 

22 password = random_string() 

23 fixtures = [ 

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

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

26 ] 

27 

28 def login(self): 

29 """ 

30 Login as user 

31 """ 

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

33 

34 def setUp(self): 

35 """ 

36 Create user 

37 Create some item in models for testing 

38 """ 

39 username = random_string() 

40 self.user = User.objects.create_superuser( 

41 username=username, 

42 password=self.password, 

43 ) 

44 

45 self.vendor = VendorModel.objects.all().order_by("name").first() 

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

47 version=self.teststring, 

48 vendor=self.vendor, 

49 ) 

50 

51 def test_login_redir(self): 

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

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

54 

55 def test_listview(self): 

56 Model.objects.all().delete() 

57 self.setUp() 

58 self.login() 

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

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

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

62 # It should be a VendorModel because of the grouped view 

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

64 self.assertEqual( 

65 item.operatingsystem_set.all().first().version, self.teststring 

66 ) 

67 

68 def test_detailview(self): 

69 self.login() 

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

71 self.assertEqual("/%s/detail/%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.version, self.teststring) 

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

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

79 self.assertIsInstance(form, FormDisabled) 

80 for field in ["version", "vendor"]: 

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

82 

83 def test_updateview(self): 

84 self.login() 

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

86 self.assertEqual("/%s/update/%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.version, self.teststring) 

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

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

94 self.assertIsInstance(form, Form) 

95 for field in ["version", "vendor"]: 

96 self.assertRaises( 

97 KeyError, 

98 form.fields[field].widget.attrs.__getitem__, 

99 "disabled", 

100 ) 

101 

102 def test_deleteview(self): 

103 self.login() 

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

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

106 response = self.client.get(url) 

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

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

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

110 self.assertEqual(item.version, self.teststring) 

111 self.assertEqual(item.vendor.name, self.vendor.name) 

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

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

114 

115 def test_deleteview_post(self): 

116 self.login() 

117 response = self.client.post( 

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

119 follow=True, 

120 ) 

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

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

123 self.assertContains( 

124 response, "%s was deleted successfully" % self.testitem.version 

125 ) 

126 with self.assertRaises(ObjectDoesNotExist): 

127 Model.objects.get(version=self.testitem.version, vendor=self.vendor) 

128 

129 def test_createview(self): 

130 self.login() 

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

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

133 response = self.client.get(url) 

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

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

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

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

138 self.assertRaises( 

139 KeyError, 

140 form.fields["version"].widget.attrs.__getitem__, 

141 "disabled", 

142 ) 

143 

144 def test_createview_post(self): 

145 # Make sure we have no objects in there 

146 Model.objects.all().delete() 

147 self.login() 

148 data = { 

149 "version": self.teststring, 

150 "vendor": self.vendor.pk, 

151 } 

152 response = self.client.post( 

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

154 data, 

155 follow=True, 

156 ) 

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

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

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

160 self.assertIsInstance(item, VendorModel) 

161 self.assertEqual( 

162 item.operatingsystem_set.all().first().version, data["version"] 

163 ) 

164 self.assertEqual( 

165 item.operatingsystem_set.all().first().vendor.pk, data["vendor"] 

166 ) 

167 

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

169 

170 def test_listview_empty_true_wo_obj(self): 

171 self.login() 

172 # Set cookie! 

173 self.client.cookies["srvmanager-show_empty"] = "true" 

174 # Make sure we have no objects in there 

175 Model.objects.all().delete() 

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

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

178 # Since it returns all Vendors, CentOS (from fixtures) should still 

179 # be there 

180 self.assertIsInstance(item, VendorModel) 

181 

182 def test_listview_empty_false_w_obj(self): 

183 self.login() 

184 # Set cookie! 

185 self.client.cookies["srvmanager-show_empty"] = "false" 

186 # Make sure we have objects in there 

187 Model.objects.all().delete() 

188 self.setUp() 

189 self.login() # New user created in setUp 

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

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

192 self.assertIsInstance(item, VendorModel, "object not the correct model!?") 

193 self.assertEqual( 

194 item.operatingsystem_set.all().first().version, self.teststring 

195 )