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
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
1from django.test import TestCase
3from .models import Model
4from vendor.models import Model as VendorModel
5from .forms import FormDisabled
6from .forms import Form
7from . import app_label
9from django.contrib.auth.models import User
11from django.core.exceptions import ObjectDoesNotExist
13from django.urls import reverse
16from sm.utils import random_string
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 ]
28 def login(self):
29 """
30 Login as user
31 """
32 self.client.login(username=self.user.username, password=self.password)
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 )
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 )
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?")
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 )
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"])
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 )
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")
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)
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 )
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 )
168 self.assertContains(response, "%s was created successfully" % data["version"])
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)
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 )