Coverage for servermodel / test_views.py: 98%
136 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
19from sm.utils import random_string
22class Tester(TestCase):
23 teststring = random_string()
24 testitem = None
25 password = random_string()
26 fixtures = [
27 "%s/fixtures/01_initial.yaml" % "vendor",
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 )
47 self.vendor = VendorModel.objects.all().order_by("name").first()
48 self.testitem, created = Model.objects.get_or_create(
49 name=self.teststring,
50 vendor=self.vendor,
51 )
53 def test_login_redir(self):
54 response = self.client.get(reverse("%s:index" % app_label))
55 self.assertEqual(response.status_code, 302, "no redirect?")
57 def test_listview(self):
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 self.assertIsInstance(item, VendorModel, "object not the correct model!?")
63 self.assertEqual(item.servermodel_set.all().first().name, self.teststring)
65 def test_detailview(self):
66 self.login()
67 url = reverse("%s:detail" % app_label, args=[self.testitem.pk])
68 self.assertEqual("/%s/detail/%i/" % (app_label, self.testitem.pk), url)
69 response = self.client.get(url)
70 self.assertEqual(response.status_code, 200, "no status 200?")
71 item = response.context[-1]["object"]
72 self.assertIsInstance(item, Model, "object not the correct model!?")
73 self.assertEqual(item.name, self.teststring)
74 form = response.context[-1]["form"]
75 self.assertIsInstance(form, FormDisabled)
76 self.assertTrue(form.fields["name"].widget.attrs["disabled"])
78 def test_updateview(self):
79 self.login()
80 url = reverse("%s:update" % app_label, args=[self.testitem.pk])
81 self.assertEqual("/%s/update/%i/" % (app_label, self.testitem.pk), url)
82 response = self.client.get(url)
83 self.assertEqual(response.status_code, 200, "no status 200?")
84 item = response.context[-1]["object"]
85 self.assertIsInstance(item, Model, "object not the correct model!?")
86 self.assertEqual(item.name, self.teststring)
87 form = response.context[-1]["form"]
88 self.assertIsInstance(form, Form)
89 self.assertRaises(
90 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled"
91 )
93 def test_deleteview(self):
94 self.login()
95 url = reverse("%s:delete" % app_label, args=[self.testitem.pk])
96 self.assertEqual("/%s/delete/%i/" % (app_label, self.testitem.pk), url)
97 response = self.client.get(url)
98 self.assertEqual(response.status_code, 200, "no status 200?")
99 item = response.context[-1]["object"]
100 self.assertIsInstance(item, Model, "object not the correct model!?")
101 self.assertEqual(item.name, self.teststring)
102 if "Are you sure you want to" not in response.content.decode("utf-8"):
103 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
104 self.assertContains(response, "Are you sure you want to delete")
105 self.assertContains(response, "Confirm Delete")
107 def test_deleteview_post(self):
108 self.login()
109 response = self.client.post(
110 reverse("%s:delete" % app_label, args=[self.testitem.pk]), follow=True
111 )
112 self.assertEqual(response.status_code, 200, "no status 200?")
113 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
114 pass
115 if (
116 "%s was deleted successfully" % self.testitem.name
117 not in response.content.decode("utf-8")
118 ):
119 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
120 self.assertContains(
121 response, "%s was deleted successfully" % self.testitem.name
122 )
123 with self.assertRaises(ObjectDoesNotExist):
124 Model.objects.get(name=self.testitem.name)
126 def test_createview(self):
127 self.login()
128 url = reverse("%s:create" % app_label)
129 self.assertEqual("/%s/create" % app_label, url)
130 response = self.client.get(url)
131 self.assertEqual(response.status_code, 200, "no status 200?")
132 self.assertRaises(KeyError, response.context[-1].__getitem__, "object")
133 self.assertIn("form", response.context[-1])
134 form = response.context[-1]["form"]
135 self.assertRaises(
136 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled"
137 )
139 def test_createview_post(self):
140 # Make sure we have no objects in there
141 Model.objects.all().delete()
142 self.login()
143 data = {
144 "name": self.teststring,
145 "vendor": self.vendor.pk,
146 }
147 response = self.client.post(
148 reverse("%s:create" % app_label),
149 data,
150 follow=True,
151 )
152 self.assertEqual(response.status_code, 200, "no status 200?")
153 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
154 item = response.context[-1]["object_list"].first()
155 self.assertEqual(item.servermodel_set.all().first().name, data["name"])
156 self.assertIsInstance(item, VendorModel)
157 self.assertIsInstance(item.servermodel_set.all().first(), Model)
158 if "%s was created successfully" % data["name"] not in response.content.decode(
159 "utf-8"
160 ):
161 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
162 self.assertContains(response, "%s was created successfully" % data["name"])
164 # Class specific tests
165 def test_listview_empty_true_wo_obj(self):
166 Model.objects.all().delete()
167 self.client.cookies["srvmanager-show_empty"] = "true"
168 self.login()
169 response = self.client.get(reverse("%s:index" % app_label))
170 self.assertEqual(response.status_code, 200, "no status 200?")
171 item = response.context[-1]["object_list"].first()
172 self.assertIsInstance(item, VendorModel, "object not the correct model!?")
173 self.assertEqual(item.name, self.vendor.name)
175 def test_listview_empty_false_wo_obj(self):
176 Model.objects.all().delete()
177 self.client.cookies["srvmanager-show_empty"] = "false"
178 self.login()
179 response = self.client.get(reverse("%s:index" % app_label))
180 self.assertEqual(response.status_code, 200, "no status 200?")
181 item = response.context[-1]["object_list"].first()
182 self.assertIsNone(item)
184 def test_listview_empty_false_w_obj(self):
185 self.client.cookies["srvmanager-show_empty"] = "false"
186 self.login()
187 response = self.client.get(reverse("%s:index" % app_label))
188 item = response.context[-1]["object_list"].first()
189 self.assertEqual(response.status_code, 200, "no status 200?")
190 self.assertIsInstance(item, VendorModel, "object not the correct model!?")
191 self.assertEqual(item.name, self.vendor.name)
193 # Class specific tests
194 def test_get_initial(self):
195 from servermodel.views import CreateView as View
197 v = View()
198 v.kwargs = {"vendor": self.vendor.pk}
199 initial = v.get_initial()
200 self.assertIsInstance(initial["vendor"], VendorModel)
201 self.assertEqual(initial["vendor"].name, self.vendor.name)