Coverage for website/tests/test_author_view_helpers_more.py: 100%
55 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.views.AuthorView import (
9 check_request_post,
10 create_social_media,
11 exclude_social_media,
12 update_social_media,
13)
15User = get_user_model()
18class PostDict(dict):
19 def getlist(self, k):
20 return self.get(k, [])
23class AuthorViewHelpersMoreTest(TestCase):
24 def test_check_request_post_detects_new_social_addition(self):
25 user = User.objects.create_user(
26 username="au1", email="au1@test.com", password="p"
27 )
28 Author.objects.create(user=user, author_name="Au1", author_url_slug="au1")
29 # author has zero social entries
31 post = PostDict(
32 {
33 "username": user.username,
34 "author_name": "Au1",
35 "social_media": ["1", "2"],
36 "social_media_profile": ["http://a", "http://b"],
37 "exclude-social": [],
38 }
39 )
40 req = SimpleNamespace(POST=post, FILES={}, user=user)
42 res = check_request_post(req)
43 self.assertIsNotNone(res)
44 # new_social_addition should be True because POST has 2 profiles while author has 0
45 self.assertTrue(res.get("new_social_addition"))
47 def test_update_social_media_updates_existing_entries(self):
48 user = User.objects.create_user(
49 username="au2", email="au2@test.com", password="p"
50 )
51 author = Author.objects.create(
52 user=user, author_name="Au2", author_url_slug="au2"
53 )
54 sm = SocialMedia.objects.create(
55 user_social_media=author, social_media=1, social_media_profile="old"
56 )
57 author.social_media.add(sm)
59 post = PostDict({"social_media": ["2"], "social_media_profile": ["new"]})
60 req = SimpleNamespace(POST=post, FILES={}, user=user)
62 changed = update_social_media(req, list(author.social_media.all()))
63 self.assertTrue(changed)
64 author.refresh_from_db()
65 sms = list(author.social_media.all())
66 self.assertEqual(str(sms[0].social_media), "2")
67 self.assertEqual(sms[0].social_media_profile, "new")
69 def test_create_social_media_appends_new_entries(self):
70 user = User.objects.create_user(
71 username="au3", email="au3@test.com", password="p"
72 )
73 author = Author.objects.create(
74 user=user, author_name="Au3", author_url_slug="au3"
75 )
76 sm = SocialMedia.objects.create(
77 user_social_media=author, social_media=1, social_media_profile="p"
78 )
79 author.social_media.add(sm)
81 # POST contains two entries; create_social_media should add the extra one
82 post = PostDict(
83 {
84 "social_media": ["1", "2"],
85 "social_media_profile": ["p", "http://x"],
86 "username": user.username,
87 }
88 )
89 req = SimpleNamespace(POST=post, FILES={}, user=user)
90 author_request_post = {"username": user.username}
92 create_social_media(req, author_request_post)
93 author.refresh_from_db()
94 self.assertEqual(author.social_media.count(), 2)
96 def test_exclude_social_media_removes_entries(self):
97 user = User.objects.create_user(
98 username="au4", email="au4@test.com", password="p"
99 )
100 author = Author.objects.create(
101 user=user, author_name="Au4", author_url_slug="au4"
102 )
103 sm1 = SocialMedia.objects.create(
104 user_social_media=author, social_media=1, social_media_profile="p1"
105 )
106 sm2 = SocialMedia.objects.create(
107 user_social_media=author, social_media=2, social_media_profile="p2"
108 )
109 author.social_media.add(sm1)
110 author.social_media.add(sm2)
112 post = PostDict(
113 {
114 "username": user.username,
115 "author_name": "Au4",
116 "social_media": ["1", "2"],
117 "social_media_profile": ["p1", "p2"],
118 "exclude-social": ["2"],
119 }
120 )
121 req = SimpleNamespace(POST=post, FILES={}, user=user)
123 # exclude_social_media uses check_request_post internally, but here we call directly
124 exclude_social_media(req, author)
125 author.refresh_from_db()
126 # only one remaining
127 self.assertEqual(author.social_media.count(), 1)