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
« 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 clustersoftware.models import Model as ClustersoftwareModel
5from .forms import FormDisabled
6from . import app_label
8from django.contrib.auth.models import User, Group
10from django.core.exceptions import ObjectDoesNotExist
12try:
13 from django.urls import reverse
14except Exception: # pragma: no cover
15 from django.urls import reverse # pragma: no cover
17from sm.utils import random_string
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 ]
31 def login(self):
32 """
33 Login as user
34 """
35 self.client.login(username=self.user.username, password=self.password)
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())
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 )
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?")
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)
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"])
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)
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"])
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")
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 )
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 )
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"])
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"])