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