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
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
1from django.test import TestCase
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
12from django.contrib.auth.models import User
14from django.core.exceptions import ObjectDoesNotExist
16try:
17 from django.urls import reverse
18except Exception: # pragma: no cover
19 from django.urls import reverse # pragma: no cover
22from sm.utils import random_string
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 ]
43 def login(self):
44 """
45 Login as user
46 """
47 self.client.login(username=self.user.username, password=self.password)
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 )
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 )
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?")
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)
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"])
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 )
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")
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 )
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 )
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)
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"])