feat(quick-access): expose effective preference provenance

This commit is contained in:
2026-08-20 02:39:41 +02:00
parent b5b629b357
commit 127b6ee5d0
8 changed files with 211 additions and 2 deletions
+85
View File
@@ -136,6 +136,91 @@ class QuickAccessTests(unittest.TestCase):
self.assertTrue(work.enabled)
self.assertTrue(work.forced)
self.assertEqual("tenant", work.locked_by)
self.assertEqual("forced", work.availability_state)
self.assertEqual("tenant", work.availability_source)
def test_effective_resolution_reports_availability_and_order_provenance(self) -> None:
with Session(self.engine) as session:
session.add_all(
(
QuickAccessProfile(
scope_type="system",
tenant_id=None,
scope_id=None,
scope_key="system:*",
category_preferences={},
tool_preferences={"example.work": {"enabled": True, "order": 40}},
revision=2,
),
QuickAccessProfile(
scope_type="user",
tenant_id="tenant-1",
scope_id="account-1",
scope_key="user:tenant-1:account-1",
category_preferences={},
tool_preferences={"example.work": {"order": 5}},
revision=2,
),
)
)
session.commit()
effective = resolve_effective(
session,
registry=registry_with_tools(),
tenant_id="tenant-1",
account_id="account-1",
permission_checker=lambda _scope: True,
)
tool = next(item for item in effective.categories if item.id == "work").tools[0]
self.assertEqual("available", tool.availability_state)
self.assertEqual("system", tool.availability_source)
self.assertEqual("user", tool.order_source)
self.assertEqual(5, tool.order)
def test_effective_resolution_retains_stale_preferences_with_scope_provenance(self) -> None:
with Session(self.engine) as session:
session.add_all(
(
QuickAccessProfile(
scope_type="tenant",
tenant_id="tenant-1",
scope_id="tenant-1",
scope_key="tenant:tenant-1",
category_preferences={"retired.category": {"enabled": False}},
tool_preferences={"retired.tool": {"order": 5}},
revision=2,
),
QuickAccessProfile(
scope_type="user",
tenant_id="tenant-1",
scope_id="account-1",
scope_key="user:tenant-1:account-1",
category_preferences={},
tool_preferences={"missing.user-tool": {"enabled": True}},
revision=2,
),
)
)
session.commit()
effective = resolve_effective(
session,
registry=registry_with_tools(),
tenant_id="tenant-1",
account_id="account-1",
permission_checker=lambda _scope: True,
)
self.assertEqual(
[
("retired.category", "category", "tenant"),
("retired.tool", "tool", "tenant"),
("missing.user-tool", "tool", "user"),
],
[(item.id, item.kind, item.source) for item in effective.stale_preferences],
)
if __name__ == "__main__":