mitai-jinkendo/backend/tests/test_widget_feature_requirements_db.py
Lars 24daeeb83c
All checks were successful
Deploy Development / deploy (push) Successful in 53s
Build Test / lint-backend (push) Successful in 0s
Build Test / build-frontend (push) Successful in 15s
feat: Implement widget-feature assignment management in admin dashboard
- Added new API endpoints for listing and updating widget-feature assignments, allowing for custom feature requirements.
- Introduced a new admin page for managing widget-feature assignments, enhancing the admin interface.
- Updated navigation to include a link to the new widget-feature assignments page.
- Refactored widget access logic to support AND-based feature requirements for widgets.
- Bumped app_dashboard version to 1.11.0 to reflect these changes and improvements.
2026-04-08 12:26:28 +02:00

48 lines
1.6 KiB
Python

from dashboard_widget_entitlements import widget_id_allowed
def test_multi_feature_and_requires_all(monkeypatch):
wid = "nutrition_detail_charts"
def fake_check(pid, fid, conn):
return {"allowed": fid in ("a", "b")}
monkeypatch.setattr(
"dashboard_widget_entitlements.get_widget_required_feature_ids",
lambda w, conn: ["a", "b"] if w == wid else [],
)
monkeypatch.setattr("dashboard_widget_entitlements._check_feature_access", fake_check)
assert widget_id_allowed(wid, "p", object()) is True
def fake_check_one_denied(pid, fid, conn):
return {"allowed": fid == "a"}
monkeypatch.setattr("dashboard_widget_entitlements._check_feature_access", fake_check_one_denied)
assert widget_id_allowed(wid, "p", object()) is False
def test_no_features_required_always_allowed(monkeypatch):
monkeypatch.setattr(
"dashboard_widget_entitlements.get_widget_required_feature_ids",
lambda wid, conn: [],
)
assert widget_id_allowed("welcome", "p", object()) is True
def test_unknown_widget_not_allowed():
assert widget_id_allowed("not_in_catalog", "p", object()) is False
def test_get_widget_required_catalog_fallback(monkeypatch):
from widget_feature_requirements_db import get_widget_required_feature_ids
class _Cur:
def execute(self, *a, **k):
pass
def fetchone(self):
return None
monkeypatch.setattr("widget_feature_requirements_db.get_cursor", lambda _c: _Cur())
assert get_widget_required_feature_ids("quick_capture", object()) == ["weight_entries"]