Coverage for patchtime / test_views.py: 97%
99 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
18from sm.utils import random_string
21class Tester(TestCase):
22 teststring = random_string()
23 testitem = None
25 def login(self):
26 """
27 Login as user 'john'
28 """
29 self.client.login(username="john", password="johnpassword")
31 def setUp(self):
32 """
33 Create user
34 Create some item in models for testing
35 """
36 self.user = User.objects.create_superuser(
37 "john", "lennon@thebeatles.com", "johnpassword"
38 )
39 self.testitem, created = Model.objects.get_or_create(
40 name=self.teststring,
41 )
43 def test_login_redir(self):
44 response = self.client.get(reverse("%s:index" % app_label))
45 self.assertEqual(response.status_code, 302, "no redirect?")
47 def test_listview(self):
48 self.login()
49 response = self.client.get(reverse("%s:index" % app_label))
50 self.assertEqual(response.status_code, 200, "no status 200?")
51 item = response.context[-1]["object_list"].first()
52 self.assertIsInstance(item, Model, "object not the correct model!?")
53 self.assertEqual(item.name, self.teststring)
55 def test_detailview(self):
56 self.login()
57 url = reverse("%s:detail" % app_label, args=[self.testitem.pk])
58 self.assertEqual("/%s/detail/%i/" % (app_label, self.testitem.pk), url)
59 response = self.client.get(url)
60 self.assertEqual(response.status_code, 200, "no status 200?")
61 item = response.context[-1]["object"]
62 self.assertIsInstance(item, Model, "object not the correct model!?")
63 self.assertEqual(item.name, self.teststring)
64 form = response.context[-1]["form"]
65 self.assertIsInstance(form, FormDisabled)
66 self.assertTrue(form.fields["name"].widget.attrs["disabled"])
68 def test_updateview(self):
69 self.login()
70 url = reverse("%s:update" % app_label, args=[self.testitem.pk])
71 self.assertEqual("/%s/update/%i/" % (app_label, self.testitem.pk), url)
72 response = self.client.get(url)
73 self.assertEqual(response.status_code, 200, "no status 200?")
74 item = response.context[-1]["object"]
75 self.assertIsInstance(item, Model, "object not the correct model!?")
76 self.assertEqual(item.name, self.teststring)
77 form = response.context[-1]["form"]
78 self.assertIsInstance(form, Form)
79 self.assertRaises(
80 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled"
81 )
83 def test_deleteview(self):
84 self.login()
85 url = reverse("%s:delete" % app_label, args=[self.testitem.pk])
86 self.assertEqual("/%s/delete/%i/" % (app_label, self.testitem.pk), url)
87 response = self.client.get(url)
88 self.assertEqual(response.status_code, 200, "no status 200?")
89 item = response.context[-1]["object"]
90 self.assertIsInstance(item, Model, "object not the correct model!?")
91 self.assertEqual(item.name, self.teststring)
92 if "Are you sure you want to" not in response.content.decode("utf-8"):
93 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
94 self.assertContains(response, "Are you sure you want to delete")
95 self.assertContains(response, "Confirm Delete")
97 def test_deleteview_post(self):
98 self.login()
99 response = self.client.post(
100 reverse("%s:delete" % app_label, args=[self.testitem.pk]), follow=True
101 )
102 self.assertEqual(response.status_code, 200, "no status 200?")
103 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
104 pass
105 if (
106 "%s was deleted successfully" % self.testitem.name
107 not in response.content.decode("utf-8")
108 ):
109 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
110 self.assertContains(
111 response, "%s was deleted successfully" % self.testitem.name
112 )
113 with self.assertRaises(ObjectDoesNotExist):
114 Model.objects.get(name=self.testitem.name)
116 def test_createview(self):
117 self.login()
118 url = reverse("%s:create" % app_label)
119 self.assertEqual("/%s/create" % app_label, url)
120 response = self.client.get(url)
121 self.assertEqual(response.status_code, 200, "no status 200?")
122 self.assertRaises(KeyError, response.context[-1].__getitem__, "object")
123 self.assertIn("form", response.context[-1])
124 form = response.context[-1]["form"]
125 self.assertRaises(
126 KeyError, form.fields["name"].widget.attrs.__getitem__, "disabled"
127 )
129 def test_createview_post(self):
130 # Make sure we have no objects in there
131 Model.objects.all().delete()
132 self.login()
133 data = {
134 "name": self.teststring,
135 }
136 response = self.client.post(
137 reverse("%s:create" % app_label),
138 data,
139 follow=True,
140 )
141 self.assertEqual(response.status_code, 200, "no status 200?")
142 self.assertRedirects(response, reverse("%s:index" % app_label), status_code=302)
143 item = response.context[-1]["object_list"].first()
144 self.assertEqual(item.name, data["name"])
145 self.assertIsInstance(item, Model)
146 if "%s was created successfully" % data["name"] not in response.content.decode(
147 "utf-8"
148 ):
149 print(f"FAILED TO FIND MESSAGE IN: {response.content.decode('utf-8')}")
150 self.assertContains(response, "%s was created successfully" % data["name"])