test_permissions.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. """Tests for the permission system definitions and consistency."""
  2. from backend.app.core.permissions import (
  3. ALL_PERMISSIONS,
  4. DEFAULT_GROUPS,
  5. PERMISSION_CATEGORIES,
  6. Permission,
  7. )
  8. class TestPermissionEnum:
  9. """Test the Permission enum values."""
  10. def test_clear_plate_permission_exists(self):
  11. """printers:clear_plate permission should exist in the enum."""
  12. assert hasattr(Permission, "PRINTERS_CLEAR_PLATE")
  13. assert Permission.PRINTERS_CLEAR_PLATE == "printers:clear_plate"
  14. def test_clear_plate_in_all_permissions(self):
  15. """printers:clear_plate should be in ALL_PERMISSIONS list."""
  16. assert "printers:clear_plate" in ALL_PERMISSIONS
  17. def test_clear_plate_in_printers_category(self):
  18. """printers:clear_plate should be in the Printers permission category."""
  19. printers_perms = PERMISSION_CATEGORIES["Printers"]
  20. assert Permission.PRINTERS_CLEAR_PLATE in printers_perms
  21. def test_clear_plate_separate_from_control(self):
  22. """clear_plate and control should be distinct permissions."""
  23. assert Permission.PRINTERS_CLEAR_PLATE != Permission.PRINTERS_CONTROL
  24. assert Permission.PRINTERS_CLEAR_PLATE.value != Permission.PRINTERS_CONTROL.value
  25. class TestDefaultGroups:
  26. """Test the default group definitions."""
  27. def test_operators_have_clear_plate(self):
  28. """Operators group should include printers:clear_plate."""
  29. operators = DEFAULT_GROUPS["Operators"]
  30. assert "printers:clear_plate" in operators["permissions"]
  31. def test_operators_have_control_and_clear_plate(self):
  32. """Operators group should have both printers:control and printers:clear_plate."""
  33. operators = DEFAULT_GROUPS["Operators"]
  34. assert "printers:control" in operators["permissions"]
  35. assert "printers:clear_plate" in operators["permissions"]
  36. def test_administrators_have_all_permissions(self):
  37. """Administrators should have all permissions including clear_plate."""
  38. admins = DEFAULT_GROUPS["Administrators"]
  39. assert "printers:clear_plate" in admins["permissions"]
  40. def test_viewers_do_not_have_clear_plate(self):
  41. """Viewers group (read-only) should not include printers:clear_plate."""
  42. viewers = DEFAULT_GROUPS["Viewers"]
  43. assert "printers:clear_plate" not in viewers["permissions"]
  44. class TestPermissionCategoriesCompleteness:
  45. """Test that all enum permissions appear in exactly one category."""
  46. def test_all_permissions_categorized(self):
  47. """Every Permission enum member should appear in a category."""
  48. categorized = set()
  49. for perms in PERMISSION_CATEGORIES.values():
  50. categorized.update(perms)
  51. for perm in Permission:
  52. assert perm in categorized, f"{perm} not in any category"
  53. def test_no_duplicate_categorization(self):
  54. """No permission should appear in multiple categories."""
  55. seen = {}
  56. for cat_name, perms in PERMISSION_CATEGORIES.items():
  57. for perm in perms:
  58. assert perm not in seen, f"{perm} in both '{seen[perm]}' and '{cat_name}'"
  59. seen[perm] = cat_name
  60. class TestInventoryViewAssignmentsPermission:
  61. """Test the INVENTORY_VIEW_ASSIGNMENTS permission."""
  62. def test_view_assignments_permission_exists(self):
  63. """inventory:view_assignments permission should exist in the enum."""
  64. assert hasattr(Permission, "INVENTORY_VIEW_ASSIGNMENTS")
  65. assert Permission.INVENTORY_VIEW_ASSIGNMENTS == "inventory:view_assignments"
  66. def test_view_assignments_in_all_permissions(self):
  67. """inventory:view_assignments should be in ALL_PERMISSIONS list."""
  68. assert "inventory:view_assignments" in ALL_PERMISSIONS
  69. def test_view_assignments_in_inventory_category(self):
  70. """inventory:view_assignments should be in the Inventory permission category."""
  71. inventory_perms = PERMISSION_CATEGORIES["Inventory"]
  72. assert Permission.INVENTORY_VIEW_ASSIGNMENTS in inventory_perms
  73. def test_view_assignments_separate_from_read(self):
  74. """view_assignments and read should be distinct permissions."""
  75. assert Permission.INVENTORY_VIEW_ASSIGNMENTS != Permission.INVENTORY_READ
  76. assert Permission.INVENTORY_VIEW_ASSIGNMENTS.value != Permission.INVENTORY_READ.value
  77. def test_operators_have_view_assignments(self):
  78. """Operators group should include inventory:view_assignments."""
  79. operators = DEFAULT_GROUPS["Operators"]
  80. assert "inventory:view_assignments" in operators["permissions"]
  81. def test_viewers_have_view_assignments(self):
  82. """Viewers group should include inventory:view_assignments."""
  83. viewers = DEFAULT_GROUPS["Viewers"]
  84. assert "inventory:view_assignments" in viewers["permissions"]
  85. def test_administrators_have_view_assignments(self):
  86. """Administrators should have all permissions including view_assignments."""
  87. admins = DEFAULT_GROUPS["Administrators"]
  88. assert "inventory:view_assignments" in admins["permissions"]