58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
|
|
from dashboard_layout_schema import DashboardLayoutPayload
|
||
|
|
from dashboard_widget_entitlements import apply_entitlements_to_layout_dict, widget_id_allowed
|
||
|
|
|
||
|
|
|
||
|
|
def test_apply_entitlements_disables_widget_without_access(monkeypatch):
|
||
|
|
monkeypatch.setattr(
|
||
|
|
"dashboard_widget_entitlements.widget_id_allowed",
|
||
|
|
lambda wid, pid, conn: wid != "nutrition_detail_charts",
|
||
|
|
)
|
||
|
|
raw = {
|
||
|
|
"version": 1,
|
||
|
|
"widgets": [
|
||
|
|
{"id": "welcome", "enabled": True},
|
||
|
|
{"id": "nutrition_detail_charts", "enabled": True},
|
||
|
|
],
|
||
|
|
}
|
||
|
|
out = apply_entitlements_to_layout_dict(raw, "p", None)
|
||
|
|
assert {w["id"]: w["enabled"] for w in out["widgets"]} == {
|
||
|
|
"welcome": True,
|
||
|
|
"nutrition_detail_charts": False,
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
def test_apply_entitlements_leaves_welcome_on_when_all_blocked(monkeypatch):
|
||
|
|
monkeypatch.setattr(
|
||
|
|
"dashboard_widget_entitlements.widget_id_allowed",
|
||
|
|
lambda wid, pid, conn: False,
|
||
|
|
)
|
||
|
|
raw = {
|
||
|
|
"version": 1,
|
||
|
|
"widgets": [
|
||
|
|
{"id": "welcome", "enabled": False},
|
||
|
|
{"id": "nutrition_detail_charts", "enabled": False},
|
||
|
|
],
|
||
|
|
}
|
||
|
|
out = apply_entitlements_to_layout_dict(raw, "p", None)
|
||
|
|
assert any(w["id"] == "welcome" and w["enabled"] for w in out["widgets"])
|
||
|
|
|
||
|
|
|
||
|
|
def test_widget_id_allowed_false_for_unknown_id():
|
||
|
|
assert widget_id_allowed("not-a-widget", "p", None) is False
|
||
|
|
|
||
|
|
|
||
|
|
def test_full_default_layout_still_validates_after_entitlements(monkeypatch):
|
||
|
|
monkeypatch.setattr(
|
||
|
|
"dashboard_widget_entitlements.widget_id_allowed",
|
||
|
|
lambda wid, pid, conn: wid != "ai_pipeline_insight",
|
||
|
|
)
|
||
|
|
from dashboard_layout_schema import default_layout_dict
|
||
|
|
|
||
|
|
d = default_layout_dict()
|
||
|
|
d["widgets"] = [{**x, "enabled": x["id"] == "ai_pipeline_insight"} for x in d["widgets"]]
|
||
|
|
adj = apply_entitlements_to_layout_dict(d, "p", None)
|
||
|
|
p2 = DashboardLayoutPayload.model_validate(adj)
|
||
|
|
ai = next(w for w in p2.widgets if w.id == "ai_pipeline_insight")
|
||
|
|
assert ai.enabled is False
|
||
|
|
assert any(w.enabled for w in p2.widgets)
|