Coverage for website/members/apps.py: 93.33%

22 statements  

« prev     ^ index     » next       coverage.py v7.6.7, created at 2025-08-14 10:31 +0000

1from django.apps import AppConfig 

2from django.template.loader import render_to_string 

3from django.urls import reverse 

4from django.utils.translation import gettext_lazy as _ 

5 

6 

7class MembersConfig(AppConfig): 

8 name = "members" 

9 verbose_name = _("Members") 

10 

11 def menu_items(self): 

12 return { 

13 "categories": [{"name": "members", "title": "For Members", "key": 2}], 

14 "items": [ 

15 { 

16 "category": "members", 

17 "title": "Member list", 

18 "url": reverse("members:index"), 

19 "key": 0, 

20 }, 

21 { 

22 "category": "members", 

23 "title": "Statistics", 

24 "url": reverse("members:statistics"), 

25 "key": 2, 

26 }, 

27 { 

28 "category": "members", 

29 "title": "G Suite Knowledge Base", 

30 "url": "https://gsuite.members.thalia.nu/", 

31 "authenticated": True, 

32 "key": 6, 

33 }, 

34 ], 

35 } 

36 

37 def user_menu_items(self): 

38 return { 

39 "sections": [{"name": "profile", "key": 1}], 

40 "items": [ 

41 { 

42 "section": "profile", 

43 "title": "Show public profile", 

44 "url": reverse("members:profile"), 

45 "key": 1, 

46 }, 

47 { 

48 "section": "profile", 

49 "title": "Edit profile", 

50 "url": reverse("members:edit-profile"), 

51 "key": 2, 

52 }, 

53 ], 

54 } 

55 

56 def announcements(self, request) -> list[dict]: 

57 # Skip announcements for anonymous users to prevent evaluating 

58 # request.member too early for API requests, because DRF only sets 

59 # the correct request.user after evaluating the middlewares. 

60 if request.user.is_anonymous: 

61 return [] 

62 

63 announcements = [] 

64 if request.member and not request.member.has_active_membership(): 

65 announcements.append( 

66 { 

67 "content": render_to_string( 

68 "members/announcement_not_member.html", 

69 context={"member": request.member}, 

70 ), 

71 "icon": "id-card", 

72 } 

73 ) 

74 if request.member and request.member.profile.event_permissions != "all": 74 ↛ 75line 74 didn't jump to line 75 because the condition on line 74 was never true

75 announcements.append( 

76 { 

77 "content": render_to_string("members/announcement_no_events.html"), 

78 "icon": "exclamation", 

79 } 

80 ) 

81 if ( 

82 request.member 

83 and request.member.profile 

84 and not request.member.profile.photo 

85 ): 

86 announcements.append( 

87 { 

88 "content": render_to_string("members/announcement_no_pfp.html"), 

89 "icon": "address-card", 

90 } 

91 ) 

92 return announcements