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

1from django.contrib.auth import get_user_model 

2from django.test import TestCase 

3from django.urls import reverse 

4 

5from website.models.AuthorModel import Author 

6from website.models.AuthorSocialMediaModel import SocialMedia 

7from website.views import AuthorView 

8 

9User = get_user_model() 

10 

11 

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 ) 

24 

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 

32 

33 from website.models.AuthorModel import Author 

34 from website.models.AuthorSocialMediaModel import SocialMedia 

35 from website.views import AuthorView 

36 

37 User = get_user_model() 

38 

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 ) 

53 

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, []) 

60 

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 

72 

73 data = AuthorView.check_request_post(DummyReq) 

74 self.assertIn("username", data) 

75 self.assertIn("new_social_addition", data) 

76 

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, []) 

82 

83 POST = POST_DICT( 

84 { 

85 "social_media": ["2"], 

86 "social_media_profile": ["http://y"], 

87 } 

88 ) 

89 user = self.user 

90 

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) 

96 

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 ) 

102 

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"))