53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
"""Tests for permission semantics reused by page and action guards."""
|
|
|
|
from doctor_workstation.core.permissions import PermissionSet
|
|
|
|
|
|
def test_global_wildcard_grants_every_page_and_action() -> None:
|
|
"""The server's global wildcard remains authoritative."""
|
|
|
|
permissions = PermissionSet(["*"])
|
|
|
|
assert permissions.is_superuser
|
|
assert permissions.can_access_page("doctor.appointment/lists")
|
|
assert permissions.can_perform_action("doctor.appointment/complete")
|
|
assert permissions.can("doctor.appointment", "complete")
|
|
|
|
|
|
def test_all_and_any_accept_sequences_or_positional_values() -> None:
|
|
"""AND and OR helpers preserve the two web-client permission semantics."""
|
|
|
|
permissions = PermissionSet(["doctor.appointment/lists", "doctor.appointment/complete"])
|
|
|
|
assert permissions.all("doctor.appointment/lists", "doctor.appointment/complete")
|
|
assert permissions.has_all(["doctor.appointment/lists", "doctor.appointment/complete"])
|
|
assert not permissions.all("doctor.appointment/lists", "doctor.appointment/cancel")
|
|
assert permissions.any(["doctor.appointment/cancel", "doctor.appointment/complete"])
|
|
assert not permissions.has_any([])
|
|
assert permissions.has_all([])
|
|
|
|
|
|
def test_page_action_categories_and_resource_wildcards() -> None:
|
|
"""Explicit page/action categories share checks without overloading UI code."""
|
|
|
|
permissions = PermissionSet(
|
|
pages=["patients/view"],
|
|
actions=["tcm.prescriptionLibrary/*"],
|
|
)
|
|
|
|
assert permissions.can_access_page("patients/view")
|
|
assert permissions.can("tcm.prescriptionLibrary", "add")
|
|
assert permissions.can_perform_action("tcm.prescriptionLibrary/delete")
|
|
assert not permissions.can_perform_action("tcm.prescription/delete")
|
|
assert "patients/view" in permissions
|
|
|
|
|
|
def test_permission_set_normalises_and_deduplicates_values() -> None:
|
|
"""Whitespace and duplicates do not create surprising guard results."""
|
|
|
|
permissions = PermissionSet([" alpha/read ", "alpha/read", ""])
|
|
|
|
assert list(permissions) == ["alpha/read"]
|
|
assert len(permissions) == 1
|
|
assert bool(permissions)
|