Files
govoplan-core/tests/test_navigation_preferences.py
T

70 lines
2.8 KiB
Python

from __future__ import annotations
import unittest
from govoplan_core.core.navigation import (
NavigationPreferences,
navigation_preferences_from_settings,
resolve_navigation_preferences,
update_navigation_preferences,
)
class NavigationPreferenceTests(unittest.TestCase):
def test_user_order_overrides_tenant_and_system_order(self) -> None:
resolved = resolve_navigation_preferences(
("dashboard", "files", "mail", "campaign"),
system=NavigationPreferences(order=("mail", "files")),
tenant=NavigationPreferences(order=("campaign", "mail")),
user=NavigationPreferences(order=("files", "campaign")),
)
self.assertEqual(
["files", "campaign", "mail", "dashboard"],
[item.id for item in sorted(resolved.values(), key=lambda item: item.order)],
)
self.assertEqual("user", resolved["files"].order_source)
self.assertEqual("user", resolved["campaign"].order_source)
def test_lower_scope_cannot_hide_locked_item(self) -> None:
resolved = resolve_navigation_preferences(
("dashboard", "files", "mail"),
system=NavigationPreferences(locked=("dashboard",)),
tenant=NavigationPreferences(hidden=("dashboard", "files"), locked=("mail",)),
user=NavigationPreferences(hidden=("dashboard", "mail")),
)
self.assertTrue(resolved["dashboard"].visible)
self.assertTrue(resolved["dashboard"].locked)
self.assertEqual("system", resolved["dashboard"].lock_source)
self.assertTrue(resolved["mail"].visible)
self.assertEqual("tenant", resolved["mail"].lock_source)
self.assertTrue(resolved["files"].visible)
self.assertEqual("user", resolved["files"].visibility_source)
def test_higher_scope_visibility_replaces_inherited_preference(self) -> None:
resolved = resolve_navigation_preferences(
("files", "mail"),
system=NavigationPreferences(hidden=("mail",)),
tenant=NavigationPreferences(hidden=("files",)),
)
self.assertTrue(resolved["mail"].visible)
self.assertFalse(resolved["files"].visible)
self.assertEqual("tenant", resolved["mail"].visibility_source)
def test_settings_round_trip_is_bounded_and_normalized(self) -> None:
settings = update_navigation_preferences(
{"unrelated": {"preserved": True}},
NavigationPreferences(order=(" files ", "files", "mail"), hidden=("mail",)),
)
parsed = navigation_preferences_from_settings(settings)
self.assertEqual(("files", "mail"), parsed.order if parsed else ())
self.assertEqual(("mail",), parsed.hidden if parsed else ())
self.assertEqual({"preserved": True}, settings["unrelated"])
if __name__ == "__main__":
unittest.main()