Coverage for clustersoftware / test_views.py: 98%
124 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 vendor.models import Model as VendorModel
6from .forms import FormDisabled
7from .forms import Form
8from . import app_label
10from django.contrib.auth.models import User
12from django.core.exceptions import ObjectDoesNotExist
14try:
15 from django.urls import reverse
16except Exception: # pragma: no cover
17 from django.urls import reverse # pragma: no cover
20from sm.utils import random_string, random_number
23class Tester(TestCase):
24 testversion = "{}.{}".format(random_number(), random_number())
25 teststring = random_string()
26 testitem = None
27 password = random_string()
28 fixtures = [
29 "%s/fixtures/01_initial.yaml" % "vendor",
30 "%s/fixtures/01_initial.yaml" % app_label,
31 ]
33 def login(self):
34 """
35 Login as user
36 """
37 self.client.login(username=self.user.username, password=self.password)
39 def setUp(self):
40 """
41 Create user
42 Create some item in models for testing
43 """
44 self.user = User.objects.create_superuser(
45 username=random_string(),
46 password=self.password,
47 )
49 self.vendor = VendorModel.objects.all().first()
50 self.testitem, created = Model.objects.get_or_create(
51 name=self.teststring,
52 version=self.testversion,
53 vendor=self.vendor,
54 )
56 def test_login_redir(self):
57 response = self.client.get(reverse("%s:index" % app_label))
58 self.assertEqual(response.status_code, 302, "no redirect?")
60 def test_listview(self):
61 Model.objects.all().delete()
62 self.setUp()
63 self.login()
64 response = self.client.get(reverse("%s:index" % app_label))
65 self.assertEqual(response.status_code, 200, "no status 200?")
66 item = response.context[-1]["object_list"].first()
67 self.assertIsInstance(item, Model, "object not the correct model!?")
68 self.assertEqual(item.version, self.testversion)
69 self.assertEqual(item.name, self.teststring)
70 self.assertEqual(item.vendor.name, self.vendor.name)
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.version, self.testversion)
81 self.assertEqual(item.name, self.teststring)
82 self.assertEqual(item.vendor.name, self.vendor.name)
83 form = response.context[-1]["form"]
84 self.assertIsInstance(form, FormDisabled)
85 for field in ["version", "name", "vendor"]:
86 self.assertTrue(form.fields[field].widget.attrs["disabled"])
88 def test_updateview(self):
89 self.login()
90 url = reverse("%s:update" % app_label, args=[self.testitem.pk])
91 self.assertEqual("/%s/update/%i/" % (app_label, self.testitem.pk), url)
92 response = self.client.get(url)
93 self.assertEqual(response.status_code, 200, "no status 200?")
94 item = response.context[-1]["object"]
95 self.assertIsInstance(item, Model, "object not the correct model!?")
96 self.assertEqual(item.version, self.testversion)
97 self.assertEqual(item.name, self.teststring)
98 self.assertEqual(item.vendor.name, self.vendor.name)
99 form = response.context[-1]["form"]
100 self.assertIsInstance(form, Form)
101 for field in ["version", "name", "vendor"]:
102 self.assertRaises(
103 KeyError, form.fields[field].widget.attrs.__getitem__, "disabled"
104 )
106 def test_deleteview(self):
107 self.login()
108 url = reverse("%s:delete" % app_label, args=[self.testitem.pk])
109 self.assertEqual("/%s/delete/%i/" % (app_label, self.testitem.pk), url)
110 response = self.client.get(url)
111 self.assertEqual(response.status_code, 200, "no status 200?")
112 item = response.context[-1]["object"]
113 self.assertIsInstance(item, Model, "object not the correct model!?")
114 self.assertEqual(item.version, self.testversion)
115 self.assertEqual(item.name, self.teststring)
116 self.assertEqual(item.vendor.name, self.vendor.name)
117 if "Are you sure you want to" not in response.content.decode("utf-8"):
118 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
119 self.assertContains(response, "Are you sure you want to delete")
120 self.assertContains(response, "Confirm Delete")
122 def test_deleteview_post(self):
123 self.login()
124 response = self.client.post(
125 reverse("%s:delete" % app_label, args=[self.testitem.pk]), follow=True
126 )
127 self.assertEqual(response.status_code, 200, "no status 200?")
128 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
129 pass
130 self.assertContains(
131 response, "%s was deleted successfully" % self.testitem.name
132 )
133 with self.assertRaises(ObjectDoesNotExist):
134 Model.objects.get(
135 name=self.testitem.name,
136 version=self.testitem.version,
137 vendor=self.vendor,
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["version"].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 "version": self.testversion,
160 "vendor": self.vendor.pk,
161 }
162 response = self.client.post(
163 reverse("%s:create" % app_label),
164 data,
165 follow=True,
166 )
167 self.assertEqual(response.status_code, 200, "no status 200?")
168 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
169 item = response.context[-1]["object_list"].first()
170 self.assertEqual(item.version, data["version"])
171 self.assertEqual(item.name, data["name"])
172 self.assertEqual(item.vendor.pk, data["vendor"])
173 self.assertEqual(item.vendor.name, self.vendor.name)
175 self.assertIsInstance(item, Model)
176 if "%s was created successfully" % data["name"] not in response.content.decode(
177 "utf-8"
178 ):
179 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
180 self.assertContains(response, "%s was created successfully" % data["name"])
182 # Class specific tests
183 def test_get_initial(self):
184 from clustersoftware.views import CreateView as View
186 v = View()
187 v.kwargs = {"vendor": self.vendor.pk}
188 initial = v.get_initial()
189 self.assertIsInstance(initial["vendor"], VendorModel)
190 self.assertEqual(initial["vendor"].name, self.vendor.name)