"""Widget-Katalog: Konsistenz (IDs, Default-Layout, Katalog-Response).""" from dashboard_layout_schema import default_layout_dict from dashboard_widget_entitlements import widgets_catalog_payload from widget_catalog import ( ALLOWED_WIDGET_IDS, DEFAULT_LAB_WIDGET_IDS, DEFAULT_PRODUCT_DASHBOARD_WIDGET_IDS, WIDGET_CATALOG, ) def test_catalog_ids_unique_and_match_allowed(): ids = [e["id"] for e in WIDGET_CATALOG] assert len(ids) == len(set(ids)) assert frozenset(ids) == ALLOWED_WIDGET_IDS def test_default_layout_follows_catalog_order(): d = default_layout_dict() assert d["version"] == 1 got = [w["id"] for w in d["widgets"]] assert got == [e["id"] for e in WIDGET_CATALOG] enabled_ids = {w["id"] for w in d["widgets"] if w["enabled"]} assert enabled_ids == DEFAULT_PRODUCT_DASHBOARD_WIDGET_IDS assert any(w["enabled"] for w in d["widgets"]) def test_lab_default_matches_lab_widget_ids(): from dashboard_layout_schema import lab_default_layout_dict d = lab_default_layout_dict() assert {w["id"] for w in d["widgets"] if w["enabled"]} == DEFAULT_LAB_WIDGET_IDS def test_catalog_payload_shape(monkeypatch): monkeypatch.setattr( "dashboard_widget_entitlements._check_feature_access", lambda *args, **kwargs: {"allowed": True}, ) r = widgets_catalog_payload("test-profile", None) assert r["catalog_version"] == 1 assert len(r["widgets"]) == len(WIDGET_CATALOG) assert {w["id"] for w in r["widgets"]} == ALLOWED_WIDGET_IDS for w in r["widgets"]: assert set(w.keys()) == {"id", "title", "description", "allowed"} assert w["allowed"] is True def test_catalog_marks_disallowed_when_feature_blocks(monkeypatch): def _check(_pid, feature_id, conn=None): return {"allowed": feature_id != "nutrition_entries"} monkeypatch.setattr("dashboard_widget_entitlements._check_feature_access", _check) r = widgets_catalog_payload("p", None) by_id = {w["id"]: w for w in r["widgets"]} assert by_id["welcome"]["allowed"] is True assert by_id["nutrition_detail_charts"]["allowed"] is False assert by_id["body_overview"]["allowed"] is True