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
« 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
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]
13 actions_by_topic_check = {}
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
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())
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) != ""