- Added new "Dashboard-Lab-Widgets" entry to the documentation for better guidance on widget configuration. - Updated the app_dashboard version to 1.8.0 to reflect the introduction of widget catalog features and layout entitlements. - Enhanced widget catalog entries to include optional feature requirements for better visibility and access control. - Improved the DashboardLabPage to manage widget visibility based on feature entitlements, ensuring a more tailored user experience.
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)
|