- 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.
48 lines
1.6 KiB
Python
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"]
|