Coverage for website/tests/test_profile_author_views.py: 99%

82 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2025-09-13 15:29 -0300

1from types import SimpleNamespace 

2 

3from django.contrib.auth import get_user_model 

4from django.test import TestCase 

5from django.urls import reverse 

6 

7from website.models.AuthorModel import Author 

8from website.models.ReaderModel import Reader 

9from website.views import AuthorView 

10 

11User = get_user_model() 

12 

13 

14class ProfileAndAuthorViewTests(TestCase): 

15 def test_create_reader_profile_via_view(self): 

16 user = User.objects.create_user( 

17 username="ruser", email="r@test.com", password="p" 

18 ) 

19 self.client.force_login(user) 

20 url = reverse("update-profile") 

21 r = self.client.post( 

22 url, data={"profile_type": "reader", "name": "Reader Name"} 

23 ) 

24 self.assertEqual(r.status_code, 302) 

25 user.refresh_from_db() 

26 self.assertTrue(hasattr(user, "reader")) 

27 

28 def test_switch_author_to_reader_via_view(self): 

29 user = User.objects.create_user( 

30 username="aruser", email="ar@test.com", password="p" 

31 ) 

32 Author.objects.create(user=user, author_name="A", author_url_slug="a") 

33 user.is_staff = True 

34 user.save() 

35 

36 self.client.force_login(user) 

37 url = reverse("update-profile") 

38 r = self.client.post(url, data={"profile_type": "reader", "name": "Now Reader"}) 

39 self.assertEqual(r.status_code, 302) 

40 user.refresh_from_db() 

41 self.assertFalse(hasattr(user, "author")) 

42 self.assertTrue(hasattr(user, "reader")) 

43 

44 def test_update_existing_author_name(self): 

45 user = User.objects.create_user( 

46 username="upda", email="up@test.com", password="p" 

47 ) 

48 author = Author.objects.create( 

49 user=user, author_name="Old Name", author_url_slug="old" 

50 ) 

51 self.client.force_login(user) 

52 url = reverse("update-profile") 

53 r = self.client.post(url, data={"profile_type": "author", "name": "New Name"}) 

54 self.assertEqual(r.status_code, 302) 

55 author.refresh_from_db() 

56 self.assertEqual(author.author_name, "New Name") 

57 

58 def test_create_social_media_and_exclude(self): 

59 user = User.objects.create_user( 

60 username="suser", email="s@test.com", password="p" 

61 ) 

62 author = Author.objects.create(user=user, author_name="S", author_url_slug="s") 

63 

64 class PostDict(dict): 

65 def getlist(self, k): 

66 return self.get(k, []) 

67 

68 req = SimpleNamespace( 

69 POST=PostDict( 

70 {"social_media": ["1", "2"], "social_media_profile": ["p1", "p2"]} 

71 ), 

72 FILES={}, 

73 user=user, 

74 ) 

75 AuthorView.create_social_media(req, {"username": user.username}) 

76 author.refresh_from_db() 

77 self.assertGreaterEqual(author.social_media.count(), 2) 

78 

79 # exclude one 

80 req2 = SimpleNamespace( 

81 POST=PostDict( 

82 { 

83 "username": user.username, 

84 "author_name": author.author_name, 

85 "social_media": ["1", "2"], 

86 "social_media_profile": ["p1", "p2"], 

87 "exclude-social": ["1"], 

88 } 

89 ), 

90 FILES={}, 

91 user=user, 

92 ) 

93 AuthorView.exclude_social_media(req2, author) 

94 author.refresh_from_db() 

95 self.assertLessEqual(author.social_media.count(), 1) 

96 

97 def test_edit_author_wrapper_redirects_when_no_author(self): 

98 user = User.objects.create_user( 

99 username="noauth", email="n@test.com", password="p" 

100 ) 

101 req = SimpleNamespace(user=user) 

102 res = AuthorView.edit_author(req) 

103 self.assertEqual(res.status_code, 302) 

104 self.assertEqual(res["Location"], "/") 

105 

106 def test_post_create_requires_author(self): 

107 user = User.objects.create_user( 

108 username="pu", email="pu@test.com", password="p" 

109 ) 

110 self.client.force_login(user) 

111 url = reverse("create_post") 

112 r = self.client.get(url) 

113 self.assertEqual(r.status_code, 302) 

114 

115 def test_post_create_success_when_author(self): 

116 user = User.objects.create_user( 

117 username="postauth", email="pa@test.com", password="p" 

118 ) 

119 Author.objects.create(user=user, author_name="Poster", author_url_slug="poster") 

120 self.client.force_login(user) 

121 url = reverse("create_post") 

122 data = { 

123 "title": "T", 

124 "text": "C", 

125 "url_slug": "t-unique", 

126 "meta_description": "md", 

127 } 

128 r = self.client.post(url, data=data) 

129 self.assertEqual(r.status_code, 302) 

130 

131 def test_reader_edit_helpers(self): 

132 user = User.objects.create_user( 

133 username="read", email="r@test.com", password="p" 

134 ) 

135 Reader.objects.create(user=user, reader_name="R") 

136 

137 class PostDict(dict): 

138 def getlist(self, k): 

139 return [self.get(k)] if self.get(k) else [] 

140 

141 req = SimpleNamespace( 

142 POST=PostDict({"username": user.username, "reader_name": "New Reader"}), 

143 FILES={}, 

144 user=user, 

145 ) 

146 from website.views.ReaderEditView import check_request_post as rcp 

147 

148 rdata = rcp(req) 

149 self.assertEqual(rdata["username"], user.username)