From e49129c3eb8a89da793a57a3c2bb449a92eb8b5b Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Wed, 19 Aug 2026 22:55:19 +0200 Subject: [PATCH] test(views): cover canonical module visibility --- tests/test_views.py | 73 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/tests/test_views.py b/tests/test_views.py index 2518cc1..8712794 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -501,6 +501,79 @@ class ViewsServiceTests(unittest.TestCase): ], ) + def test_user_and_group_views_hide_tenant_effective_module_roots(self) -> None: + group_view = self.create_published_definition( + name="Group files", + scope_type="group", + scope_id="group-1", + visible_surface_ids=ordinary_surface_ids(), + ) + user_view = self.create_published_definition( + name="Personal files", + scope_type="user", + scope_id="account-user", + visible_surface_ids=ordinary_surface_ids(), + ) + self.assign( + group_view, + scope_type="group", + scope_id="group-1", + ) + self.assign( + user_view, + scope_type="user", + scope_id="account-user", + ) + + cases = ( + ("account-member", ("group-1",), group_view.id), + ("account-user", (), user_view.id), + ) + for account_id, group_ids, expected_view_id in cases: + with self.subTest(account_id=account_id): + state = resolve_effective_view( + self.session, + tenant_id="tenant-1", + account_id=account_id, + group_ids=group_ids, + catalogue=self.catalogue, + ) + + self.assertEqual(expected_view_id, state.effective.view_id) + self.assertIn("files.module", state.effective.visible_surface_ids) + self.assertNotIn("access.module", state.effective.visible_surface_ids) + + def test_group_view_cannot_restore_a_tenant_unavailable_module(self) -> None: + definition = self.create_published_definition( + name="Group files", + scope_type="group", + scope_id="group-1", + visible_surface_ids=ordinary_surface_ids(), + ) + self.assign( + definition, + scope_type="group", + scope_id="group-1", + ) + active_catalogue = tuple( + surface for surface in self.catalogue if surface.module_id != "files" + ) + + state = resolve_effective_view( + self.session, + tenant_id="tenant-1", + account_id="account-member", + group_ids=("group-1",), + catalogue=active_catalogue, + ) + + self.assertIsNone(state.effective.view_id) + self.assertNotIn("files.module", state.effective.visible_surface_ids) + self.assertIn( + "view.stale_surfaces", + {diagnostic.code for diagnostic in state.diagnostics}, + ) + def test_normalization_requires_navigation_and_route(self) -> None: with self.assertRaisesRegex(ViewsValidationError, "navigation"): normalize_visible_surface_ids(