Coverage for website/tests/test_profile_author_views.py: 99%
82 statements
« prev ^ index » next coverage.py v7.5.0, created at 2025-09-13 15:29 -0300
« prev ^ index » next coverage.py v7.5.0, created at 2025-09-13 15:29 -0300
1from types import SimpleNamespace
3from django.contrib.auth import get_user_model
4from django.test import TestCase
5from django.urls import reverse
7from website.models.AuthorModel import Author
8from website.models.ReaderModel import Reader
9from website.views import AuthorView
11User = get_user_model()
14class ProfileAndAuthorViewTests(TestCase):
15 def test_create_reader_profile_via_view(self):
16 user = User.objects.create_user(
17 username="ruser", email="r@test.com", password="p"
18 )
19 self.client.force_login(user)
20 url = reverse("update-profile")
21 r = self.client.post(
22 url, data={"profile_type": "reader", "name": "Reader Name"}
23 )
24 self.assertEqual(r.status_code, 302)
25 user.refresh_from_db()
26 self.assertTrue(hasattr(user, "reader"))
28 def test_switch_author_to_reader_via_view(self):
29 user = User.objects.create_user(
30 username="aruser", email="ar@test.com", password="p"
31 )
32 Author.objects.create(user=user, author_name="A", author_url_slug="a")
33 user.is_staff = True
34 user.save()
36 self.client.force_login(user)
37 url = reverse("update-profile")
38 r = self.client.post(url, data={"profile_type": "reader", "name": "Now Reader"})
39 self.assertEqual(r.status_code, 302)
40 user.refresh_from_db()
41 self.assertFalse(hasattr(user, "author"))
42 self.assertTrue(hasattr(user, "reader"))
44 def test_update_existing_author_name(self):
45 user = User.objects.create_user(
46 username="upda", email="up@test.com", password="p"
47 )
48 author = Author.objects.create(
49 user=user, author_name="Old Name", author_url_slug="old"
50 )
51 self.client.force_login(user)
52 url = reverse("update-profile")
53 r = self.client.post(url, data={"profile_type": "author", "name": "New Name"})
54 self.assertEqual(r.status_code, 302)
55 author.refresh_from_db()
56 self.assertEqual(author.author_name, "New Name")
58 def test_create_social_media_and_exclude(self):
59 user = User.objects.create_user(
60 username="suser", email="s@test.com", password="p"
61 )
62 author = Author.objects.create(user=user, author_name="S", author_url_slug="s")
64 class PostDict(dict):
65 def getlist(self, k):
66 return self.get(k, [])
68 req = SimpleNamespace(
69 POST=PostDict(
70 {"social_media": ["1", "2"], "social_media_profile": ["p1", "p2"]}
71 ),
72 FILES={},
73 user=user,
74 )
75 AuthorView.create_social_media(req, {"username": user.username})
76 author.refresh_from_db()
77 self.assertGreaterEqual(author.social_media.count(), 2)
79 # exclude one
80 req2 = SimpleNamespace(
81 POST=PostDict(
82 {
83 "username": user.username,
84 "author_name": author.author_name,
85 "social_media": ["1", "2"],
86 "social_media_profile": ["p1", "p2"],
87 "exclude-social": ["1"],
88 }
89 ),
90 FILES={},
91 user=user,
92 )
93 AuthorView.exclude_social_media(req2, author)
94 author.refresh_from_db()
95 self.assertLessEqual(author.social_media.count(), 1)
97 def test_edit_author_wrapper_redirects_when_no_author(self):
98 user = User.objects.create_user(
99 username="noauth", email="n@test.com", password="p"
100 )
101 req = SimpleNamespace(user=user)
102 res = AuthorView.edit_author(req)
103 self.assertEqual(res.status_code, 302)
104 self.assertEqual(res["Location"], "/")
106 def test_post_create_requires_author(self):
107 user = User.objects.create_user(
108 username="pu", email="pu@test.com", password="p"
109 )
110 self.client.force_login(user)
111 url = reverse("create_post")
112 r = self.client.get(url)
113 self.assertEqual(r.status_code, 302)
115 def test_post_create_success_when_author(self):
116 user = User.objects.create_user(
117 username="postauth", email="pa@test.com", password="p"
118 )
119 Author.objects.create(user=user, author_name="Poster", author_url_slug="poster")
120 self.client.force_login(user)
121 url = reverse("create_post")
122 data = {
123 "title": "T",
124 "text": "C",
125 "url_slug": "t-unique",
126 "meta_description": "md",
127 }
128 r = self.client.post(url, data=data)
129 self.assertEqual(r.status_code, 302)
131 def test_reader_edit_helpers(self):
132 user = User.objects.create_user(
133 username="read", email="r@test.com", password="p"
134 )
135 Reader.objects.create(user=user, reader_name="R")
137 class PostDict(dict):
138 def getlist(self, k):
139 return [self.get(k)] if self.get(k) else []
141 req = SimpleNamespace(
142 POST=PostDict({"username": user.username, "reader_name": "New Reader"}),
143 FILES={},
144 user=user,
145 )
146 from website.views.ReaderEditView import check_request_post as rcp
148 rdata = rcp(req)
149 self.assertEqual(rdata["username"], user.username)