Coverage for app / backend / src / tests / test_notification_settings.py: 100%

21 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-09 12:40 +0000

1from couchers.i18n.locales import DEFAULT_LOCALE 

2from couchers.models.notifications import NotificationTopicAction 

3from couchers.notifications.settings import settings_layout 

4from couchers.notifications.utils import get_topic_action_description 

5 

6 

7def test_all_notifications_appear_in_settings() -> None: 

8 # check settings contain all actions+topics 

9 actions_by_topic: dict[str, list[str]] = {} 

10 for t in NotificationTopicAction: 

11 actions_by_topic[t.topic] = actions_by_topic.get(t.topic, []) + [t.action] 

12 

13 actions_by_topic_check = {} 

14 

15 for heading, group in settings_layout: 

16 for topic, name, items in group: 

17 actions = [] 

18 for topic_action in items: 

19 actions.append(topic_action.action) 

20 actions_by_topic_check[topic] = actions 

21 

22 for topic, actions in actions_by_topic.items(): 

23 assert sorted(actions) == sorted(actions_by_topic_check[topic]), ( 

24 f"Expected {actions} == {actions_by_topic_check[topic]} for {topic}" 

25 ) 

26 assert sorted(actions_by_topic.keys()) == sorted(actions_by_topic_check.keys()) 

27 

28 

29def test_all_notifications_have_descriptions() -> None: 

30 for topic_action in NotificationTopicAction: 

31 # Will throw if there's no string 

32 assert get_topic_action_description(topic_action, locale=DEFAULT_LOCALE) != ""