mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-09-30 03:01:21 +02:00
visibility into AMS spool assignments on printer cards without exposing the full Inventory page (#635). The list_assignments endpoint now requires this new permission instead of inventory:read. All default groups (Administrators, Operators, Viewers) include it for backward compatibility. Closes #634
115 lines
5.0 KiB
Python
115 lines
5.0 KiB
Python
"""Tests for the permission system definitions and consistency."""
|
|
|
|
from backend.app.core.permissions import (
|
|
ALL_PERMISSIONS,
|
|
DEFAULT_GROUPS,
|
|
PERMISSION_CATEGORIES,
|
|
Permission,
|
|
)
|
|
|
|
|
|
class TestPermissionEnum:
|
|
"""Test the Permission enum values."""
|
|
|
|
def test_clear_plate_permission_exists(self):
|
|
"""printers:clear_plate permission should exist in the enum."""
|
|
assert hasattr(Permission, "PRINTERS_CLEAR_PLATE")
|
|
assert Permission.PRINTERS_CLEAR_PLATE == "printers:clear_plate"
|
|
|
|
def test_clear_plate_in_all_permissions(self):
|
|
"""printers:clear_plate should be in ALL_PERMISSIONS list."""
|
|
assert "printers:clear_plate" in ALL_PERMISSIONS
|
|
|
|
def test_clear_plate_in_printers_category(self):
|
|
"""printers:clear_plate should be in the Printers permission category."""
|
|
printers_perms = PERMISSION_CATEGORIES["Printers"]
|
|
assert Permission.PRINTERS_CLEAR_PLATE in printers_perms
|
|
|
|
def test_clear_plate_separate_from_control(self):
|
|
"""clear_plate and control should be distinct permissions."""
|
|
assert Permission.PRINTERS_CLEAR_PLATE != Permission.PRINTERS_CONTROL
|
|
assert Permission.PRINTERS_CLEAR_PLATE.value != Permission.PRINTERS_CONTROL.value
|
|
|
|
|
|
class TestDefaultGroups:
|
|
"""Test the default group definitions."""
|
|
|
|
def test_operators_have_clear_plate(self):
|
|
"""Operators group should include printers:clear_plate."""
|
|
operators = DEFAULT_GROUPS["Operators"]
|
|
assert "printers:clear_plate" in operators["permissions"]
|
|
|
|
def test_operators_have_control_and_clear_plate(self):
|
|
"""Operators group should have both printers:control and printers:clear_plate."""
|
|
operators = DEFAULT_GROUPS["Operators"]
|
|
assert "printers:control" in operators["permissions"]
|
|
assert "printers:clear_plate" in operators["permissions"]
|
|
|
|
def test_administrators_have_all_permissions(self):
|
|
"""Administrators should have all permissions including clear_plate."""
|
|
admins = DEFAULT_GROUPS["Administrators"]
|
|
assert "printers:clear_plate" in admins["permissions"]
|
|
|
|
def test_viewers_do_not_have_clear_plate(self):
|
|
"""Viewers group (read-only) should not include printers:clear_plate."""
|
|
viewers = DEFAULT_GROUPS["Viewers"]
|
|
assert "printers:clear_plate" not in viewers["permissions"]
|
|
|
|
|
|
class TestPermissionCategoriesCompleteness:
|
|
"""Test that all enum permissions appear in exactly one category."""
|
|
|
|
def test_all_permissions_categorized(self):
|
|
"""Every Permission enum member should appear in a category."""
|
|
categorized = set()
|
|
for perms in PERMISSION_CATEGORIES.values():
|
|
categorized.update(perms)
|
|
for perm in Permission:
|
|
assert perm in categorized, f"{perm} not in any category"
|
|
|
|
def test_no_duplicate_categorization(self):
|
|
"""No permission should appear in multiple categories."""
|
|
seen = {}
|
|
for cat_name, perms in PERMISSION_CATEGORIES.items():
|
|
for perm in perms:
|
|
assert perm not in seen, f"{perm} in both '{seen[perm]}' and '{cat_name}'"
|
|
seen[perm] = cat_name
|
|
|
|
|
|
class TestInventoryViewAssignmentsPermission:
|
|
"""Test the INVENTORY_VIEW_ASSIGNMENTS permission."""
|
|
|
|
def test_view_assignments_permission_exists(self):
|
|
"""inventory:view_assignments permission should exist in the enum."""
|
|
assert hasattr(Permission, "INVENTORY_VIEW_ASSIGNMENTS")
|
|
assert Permission.INVENTORY_VIEW_ASSIGNMENTS == "inventory:view_assignments"
|
|
|
|
def test_view_assignments_in_all_permissions(self):
|
|
"""inventory:view_assignments should be in ALL_PERMISSIONS list."""
|
|
assert "inventory:view_assignments" in ALL_PERMISSIONS
|
|
|
|
def test_view_assignments_in_inventory_category(self):
|
|
"""inventory:view_assignments should be in the Inventory permission category."""
|
|
inventory_perms = PERMISSION_CATEGORIES["Inventory"]
|
|
assert Permission.INVENTORY_VIEW_ASSIGNMENTS in inventory_perms
|
|
|
|
def test_view_assignments_separate_from_read(self):
|
|
"""view_assignments and read should be distinct permissions."""
|
|
assert Permission.INVENTORY_VIEW_ASSIGNMENTS != Permission.INVENTORY_READ
|
|
assert Permission.INVENTORY_VIEW_ASSIGNMENTS.value != Permission.INVENTORY_READ.value
|
|
|
|
def test_operators_have_view_assignments(self):
|
|
"""Operators group should include inventory:view_assignments."""
|
|
operators = DEFAULT_GROUPS["Operators"]
|
|
assert "inventory:view_assignments" in operators["permissions"]
|
|
|
|
def test_viewers_have_view_assignments(self):
|
|
"""Viewers group should include inventory:view_assignments."""
|
|
viewers = DEFAULT_GROUPS["Viewers"]
|
|
assert "inventory:view_assignments" in viewers["permissions"]
|
|
|
|
def test_administrators_have_view_assignments(self):
|
|
"""Administrators should have all permissions including view_assignments."""
|
|
admins = DEFAULT_GROUPS["Administrators"]
|
|
assert "inventory:view_assignments" in admins["permissions"]
|