Coverage for clusterpackagetype / test_views.py: 98%
103 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 .forms import FormDisabled
6from .forms import Form
7from . import app_label
9from django.contrib.auth.models import User
11from django.core.exceptions import ObjectDoesNotExist
13try:
14 from django.urls import reverse
15except Exception: # pragma: no cover
16 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 = []
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 self.user = User.objects.create_superuser(
40 username=random_string(),
41 password=self.password,
42 )
44 self.testitem, created = Model.objects.get_or_create(
45 name=self.teststring,
46 )
48 def test_login_redir(self):
49 response = self.client.get(reverse("%s:index" % app_label))
50 self.assertEqual(response.status_code, 302, "no redirect?")
52 def test_listview(self):
53 Model.objects.all().delete()
54 self.setUp()
55 self.login()
56 response = self.client.get(reverse("%s:index" % app_label))
57 self.assertEqual(response.status_code, 200, "no status 200?")
58 item = response.context[-1]["object_list"].first()
59 self.assertIsInstance(item, Model, "object not the correct model!?")
60 self.assertEqual(item.name, self.teststring)
62 def test_detailview(self):
63 self.login()
64 url = reverse("%s:detail" % app_label, args=[self.testitem.pk])
65 self.assertEqual("/%s/detail/%i/" % (app_label, self.testitem.pk), url)
66 response = self.client.get(url)
67 self.assertEqual(response.status_code, 200, "no status 200?")
68 item = response.context[-1]["object"]
69 self.assertIsInstance(item, Model, "object not the correct model!?")
70 self.assertEqual(item.name, self.teststring)
71 form = response.context[-1]["form"]
72 self.assertIsInstance(form, FormDisabled)
73 for field in ["name"]:
74 self.assertTrue(form.fields[field].widget.attrs["disabled"])
76 def test_updateview(self):
77 self.login()
78 url = reverse("%s:update" % app_label, args=[self.testitem.pk])
79 self.assertEqual("/%s/update/%i/" % (app_label, self.testitem.pk), url)
80 response = self.client.get(url)
81 self.assertEqual(response.status_code, 200, "no status 200?")
82 item = response.context[-1]["object"]
83 self.assertIsInstance(item, Model, "object not the correct model!?")
84 self.assertEqual(item.name, self.teststring)
85 form = response.context[-1]["form"]
86 self.assertIsInstance(form, Form)
87 for field in ["name"]:
88 self.assertRaises(
89 KeyError, form.fields[field].widget.attrs.__getitem__, "disabled"
90 )
92 def test_deleteview(self):
93 self.login()
94 url = reverse("%s:delete" % app_label, args=[self.testitem.pk])
95 self.assertEqual("/%s/delete/%i/" % (app_label, self.testitem.pk), url)
96 response = self.client.get(url)
97 self.assertEqual(response.status_code, 200, "no status 200?")
98 item = response.context[-1]["object"]
99 self.assertIsInstance(item, Model, "object not the correct model!?")
100 self.assertEqual(item.name, self.teststring)
101 if "Are you sure you want to" not in response.content.decode("utf-8"):
102 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
103 self.assertContains(response, "Are you sure you want to delete")
104 self.assertContains(response, "Confirm Delete")
106 def test_deleteview_post(self):
107 self.login()
108 response = self.client.post(
109 reverse("%s:delete" % app_label, args=[self.testitem.pk]), follow=True
110 )
111 self.assertEqual(response.status_code, 200, "no status 200?")
112 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
113 pass
114 self.assertContains(
115 response, "%s was deleted successfully" % self.testitem.name
116 )
117 with self.assertRaises(ObjectDoesNotExist):
118 Model.objects.get(
119 name=self.testitem.name,
120 )
122 def test_createview(self):
123 self.login()
124 url = reverse("%s:create" % app_label)
125 self.assertEqual("/%s/create" % app_label, url)
126 response = self.client.get(url)
127 self.assertEqual(response.status_code, 200, "no status 200?")
128 self.assertRaises(KeyError, response.context[-1].__getitem__, "object")
129 self.assertIn("form", response.context[-1])
130 form = response.context[-1]["form"]
131 self.assertRaises(
132 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled"
133 )
135 def test_createview_post(self):
136 # Make sure we have no objects in there
137 Model.objects.all().delete()
138 self.login()
139 data = {
140 "name": self.teststring,
141 }
142 response = self.client.post(
143 reverse("%s:create" % app_label),
144 data,
145 follow=True,
146 )
147 self.assertEqual(response.status_code, 200, "no status 200?")
148 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
149 item = response.context[-1]["object_list"].first()
150 self.assertEqual(item.name, data["name"])
152 self.assertIsInstance(item, Model)
153 if "%s was created successfully" % data["name"] not in response.content.decode(
154 "utf-8"
155 ):
156 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
157 self.assertContains(response, "%s was created successfully" % data["name"])