feat(quick-access): expose effective preference provenance
This commit is contained in:
@@ -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__":
|
||||
|
||||
Reference in New Issue
Block a user