Coverage for website/tests/test_profile_reader_post_views.py: 100%

52 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 Client, TestCase 

5from django.urls import reverse 

6 

7from website.models.AuthorModel import Author 

8from website.models.PostModel import Post 

9from website.models.ReaderModel import Reader 

10 

11User = get_user_model() 

12 

13 

14class ProfileReaderPostViewsTest(TestCase): 

15 def setUp(self): 

16 self.client = Client() 

17 

18 def test_update_profile_create_author_from_reader(self): 

19 user = User.objects.create_user( 

20 username="p1", email="p1@test.com", password="p" 

21 ) 

22 self.client.force_login(user) 

23 

24 url = reverse("update-profile") 

25 data = {"profile_type": "author", "name": "New Author"} 

26 resp = self.client.post(url, data) 

27 # redirect on success 

28 self.assertEqual(resp.status_code, 302) 

29 user.refresh_from_db() 

30 self.assertTrue(hasattr(user, "author")) 

31 

32 def test_update_profile_create_reader_from_none(self): 

33 user = User.objects.create_user( 

34 username="p2", email="p2@test.com", password="p" 

35 ) 

36 self.client.force_login(user) 

37 

38 url = reverse("update-profile") 

39 data = {"profile_type": "reader", "name": "New Reader"} 

40 resp = self.client.post(url, data) 

41 self.assertEqual(resp.status_code, 302) 

42 user.refresh_from_db() 

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

44 

45 def test_reader_edit_check_user_form_conflict(self): 

46 u1 = User.objects.create_user(username="r1", email="r1@test.com", password="p") 

47 u2 = User.objects.create_user(username="r2", email="r2@test.com", password="p") 

48 reader = Reader.objects.create(user=u1, reader_name="R1") 

49 

50 # simulate POST where username conflicts with u2 

51 post = SimpleNamespace( 

52 POST={"username": u2.username, "reader_name": "X"}, FILES={}, user=u1 

53 ) 

54 from website.views.ReaderEditView import check_user_form 

55 

56 ok = check_user_form(post, reader) 

57 self.assertIsInstance(ok, bool) 

58 

59 def test_post_create_requires_author_profile(self): 

60 user = User.objects.create_user( 

61 username="pp1", email="pp1@test.com", password="p" 

62 ) 

63 self.client.force_login(user) 

64 

65 url = reverse("create_post") 

66 resp = self.client.get(url) 

67 # should redirect because no author profile 

68 self.assertEqual(resp.status_code, 302) 

69 

70 def test_post_create_success_with_author(self): 

71 user = User.objects.create_user( 

72 username="pp2", email="pp2@test.com", password="p" 

73 ) 

74 # ensure an author profile exists for this user 

75 Author.objects.create(user=user, author_name="AuthX", author_url_slug="authx") 

76 self.client.force_login(user) 

77 

78 url = reverse("create_post") 

79 data = { 

80 "title": "T", 

81 "url_slug": "t", 

82 "meta_description": "m", 

83 "text": "content", 

84 } 

85 resp = self.client.post(url, data) 

86 # should redirect to post detail on success 

87 self.assertEqual(resp.status_code, 302) 

88 self.assertTrue(Post.objects.filter(url_slug="t").exists())