Coverage for website/tests/test_author_profile.py: 51%
57 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 django.contrib.auth import get_user_model
2from django.test import TestCase
3from django.urls import reverse
5from website.models.AuthorModel import Author
6from website.models.AuthorSocialMediaModel import SocialMedia
7from website.views import AuthorView
9User = get_user_model()
12class AuthorHelpersTests(TestCase):
13 def setUp(self):
14 self.user = User.objects.create_user(
15 username="auth", email="auth@test.com", password="pass"
16 )
17 self.author = Author.objects.create(user=self.user, author_name="Auth")
18 # add one social
19 SocialMedia.objects.create(
20 user_social_media=self.author,
21 social_media=1,
22 social_media_profile="http://x",
23 )
25 def test_check_request_post_returns_expected_structure(self):
26 # simulate request with POST and FILES
27 class DummyReq:
28 class POST_DICT(dict):
29 from django.contrib.auth import get_user_model
30 from django.test import TestCase
31 from django.urls import reverse
33 from website.models.AuthorModel import Author
34 from website.models.AuthorSocialMediaModel import SocialMedia
35 from website.views import AuthorView
37 User = get_user_model()
39 class AuthorHelpersTests(TestCase):
40 def setUp(self):
41 self.user = User.objects.create_user(
42 username="auth", email="auth@test.com", password="pass"
43 )
44 self.author = Author.objects.create(
45 user=self.user, author_name="Auth"
46 )
47 # add one social
48 SocialMedia.objects.create(
49 user_social_media=self.author,
50 social_media=1,
51 social_media_profile="http://x",
52 )
54 def test_check_request_post_returns_expected_structure(self):
55 # simulate request with POST and FILES
56 class DummyReq:
57 class POST_DICT(dict):
58 def getlist(self, k):
59 return self.get(k, [])
61 POST = POST_DICT(
62 {
63 "username": self.user.username,
64 "author_name": "A",
65 "social_media": ["1"],
66 "social_media_profile": ["u"],
67 "exclude-social": [""],
68 }
69 )
70 FILES = {}
71 user = self.user
73 data = AuthorView.check_request_post(DummyReq)
74 self.assertIn("username", data)
75 self.assertIn("new_social_addition", data)
77 def test_update_social_media_detects_changes(self):
78 class DummyReq:
79 class POST_DICT(dict):
80 def getlist(self, k):
81 return self.get(k, [])
83 POST = POST_DICT(
84 {
85 "social_media": ["2"],
86 "social_media_profile": ["http://y"],
87 }
88 )
89 user = self.user
91 # existing social is different -> should mark updated
92 updated = AuthorView.update_social_media(
93 DummyReq, list(self.author.social_media.all())
94 )
95 self.assertTrue(updated)
97 class ProfileUpdateTests(TestCase):
98 def setUp(self):
99 self.user = User.objects.create_user(
100 username="u", email="u@test.com", password="p"
101 )
103 def test_create_author_profile_via_view(self):
104 self.client.force_login(self.user)
105 url = reverse("update-profile")
106 # post to create author
107 r = self.client.post(
108 url, data={"profile_type": "author", "name": "New Author"}
109 )
110 self.assertEqual(r.status_code, 302)
111 self.user.refresh_from_db()
112 self.assertTrue(hasattr(self.user, "author"))