Coverage for website/tests/test_author_profile_helpers.py: 98%
53 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
6from website.models.AuthorModel import Author
7from website.models.AuthorSocialMediaModel import SocialMedia
8from website.models.ReaderModel import Reader
9from website.views import AuthorView
11User = get_user_model()
14class AuthorProfileHelpersTest(TestCase):
15 def test_check_author_form_and_user_form_username_conflict(self):
16 # create two users to cause username conflict
17 user1 = User.objects.create_user(
18 username="u1", email="u1@test.com", password="p"
19 )
20 user2 = User.objects.create_user(
21 username="u2", email="u2@test.com", password="p"
22 )
23 # create an Author record for user2 so check_request_post can query it
24 Author.objects.create(user=user2, author_name="Other", author_url_slug="other")
25 author = Author.objects.create(user=user1, author_name="A", author_url_slug="a")
27 # build a fake POST where username conflicts with user2
28 class PostDict(dict):
29 def getlist(self, k):
30 return self.get(k, [])
32 post = PostDict(
33 {
34 "username": user2.username,
35 "author_name": "NewA",
36 "social_media": [],
37 "social_media_profile": [],
38 }
39 )
40 req = SimpleNamespace(POST=post, FILES={}, user=user1)
42 # check_request_post should report username conflict (non-empty queryset)
43 ar = AuthorView.check_request_post(req)
44 self.assertIsNotNone(ar)
45 self.assertIn("check_username_request", ar)
47 # call check_author_form (may return True/False depending on form validity)
48 result = AuthorView.check_author_form(req, author)
49 self.assertIn(result, (True, False))
51 def test_update_social_media_detects_changes(self):
52 user = User.objects.create_user(
53 username="u3", email="u3@test.com", password="p"
54 )
55 author = Author.objects.create(
56 user=user, author_name="Auth3", author_url_slug="auth3"
57 )
58 sm = SocialMedia.objects.create(
59 user_social_media=author, social_media=1, social_media_profile="p"
60 )
61 author.social_media.add(sm)
63 class PostDict(dict):
64 def getlist(self, k):
65 return self.get(k, [])
67 # change the social media values
68 post = PostDict({"social_media": ["2"], "social_media_profile": ["http://y"]})
69 req = SimpleNamespace(POST=post, FILES={}, user=user)
71 # call update_social_media for coverage; return value not needed here
72 AuthorView.update_social_media(req, list(author.social_media.all()))
73 # ensure DB reflects the new values for the first social entry
74 author.refresh_from_db()
75 sms = list(author.social_media.all())
76 self.assertGreaterEqual(len(sms), 1)
77 self.assertEqual(str(sms[0].social_media), "2")
78 self.assertEqual(sms[0].social_media_profile, "http://y")
81class ReaderEditHelpersTest(TestCase):
82 def test_reader_check_user_form_username_conflict(self):
83 user = User.objects.create_user(
84 username="r1", email="r1@test.com", password="p"
85 )
86 other = User.objects.create_user(
87 username="r2", email="r2@test.com", password="p"
88 )
89 reader = Reader.objects.create(user=user, reader_name="R")
91 class PostDict(dict):
92 def getlist(self, k):
93 return []
95 # attempt to change username to other.username -> conflict
96 post = PostDict({"username": other.username, "reader_name": "NewR"})
97 req = SimpleNamespace(POST=post, FILES={}, user=user)
99 from website.views.ReaderEditView import check_user_form as rcheck
101 ok = rcheck(req, reader)
102 self.assertIsInstance(ok, bool)