Coverage for website/tests/test_profile_reader_post_views.py: 100%
52 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 Client, TestCase
5from django.urls import reverse
7from website.models.AuthorModel import Author
8from website.models.PostModel import Post
9from website.models.ReaderModel import Reader
11User = get_user_model()
14class ProfileReaderPostViewsTest(TestCase):
15 def setUp(self):
16 self.client = Client()
18 def test_update_profile_create_author_from_reader(self):
19 user = User.objects.create_user(
20 username="p1", email="p1@test.com", password="p"
21 )
22 self.client.force_login(user)
24 url = reverse("update-profile")
25 data = {"profile_type": "author", "name": "New Author"}
26 resp = self.client.post(url, data)
27 # redirect on success
28 self.assertEqual(resp.status_code, 302)
29 user.refresh_from_db()
30 self.assertTrue(hasattr(user, "author"))
32 def test_update_profile_create_reader_from_none(self):
33 user = User.objects.create_user(
34 username="p2", email="p2@test.com", password="p"
35 )
36 self.client.force_login(user)
38 url = reverse("update-profile")
39 data = {"profile_type": "reader", "name": "New Reader"}
40 resp = self.client.post(url, data)
41 self.assertEqual(resp.status_code, 302)
42 user.refresh_from_db()
43 self.assertTrue(hasattr(user, "reader"))
45 def test_reader_edit_check_user_form_conflict(self):
46 u1 = User.objects.create_user(username="r1", email="r1@test.com", password="p")
47 u2 = User.objects.create_user(username="r2", email="r2@test.com", password="p")
48 reader = Reader.objects.create(user=u1, reader_name="R1")
50 # simulate POST where username conflicts with u2
51 post = SimpleNamespace(
52 POST={"username": u2.username, "reader_name": "X"}, FILES={}, user=u1
53 )
54 from website.views.ReaderEditView import check_user_form
56 ok = check_user_form(post, reader)
57 self.assertIsInstance(ok, bool)
59 def test_post_create_requires_author_profile(self):
60 user = User.objects.create_user(
61 username="pp1", email="pp1@test.com", password="p"
62 )
63 self.client.force_login(user)
65 url = reverse("create_post")
66 resp = self.client.get(url)
67 # should redirect because no author profile
68 self.assertEqual(resp.status_code, 302)
70 def test_post_create_success_with_author(self):
71 user = User.objects.create_user(
72 username="pp2", email="pp2@test.com", password="p"
73 )
74 # ensure an author profile exists for this user
75 Author.objects.create(user=user, author_name="AuthX", author_url_slug="authx")
76 self.client.force_login(user)
78 url = reverse("create_post")
79 data = {
80 "title": "T",
81 "url_slug": "t",
82 "meta_description": "m",
83 "text": "content",
84 }
85 resp = self.client.post(url, data)
86 # should redirect to post detail on success
87 self.assertEqual(resp.status_code, 302)
88 self.assertTrue(Post.objects.filter(url_slug="t").exists())