test_process_route_builtin.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import unittest
  2. from types import SimpleNamespace
  3. from unittest.mock import MagicMock
  4. from app.crud.process_route import (
  5. assert_route_writable,
  6. assert_step_route_writable,
  7. is_super_admin_user,
  8. )
  9. class TestIsSuperAdminUser(unittest.TestCase):
  10. def test_super_admin(self):
  11. self.assertTrue(is_super_admin_user({"role": "super_admin"}))
  12. def test_admin_not_super(self):
  13. self.assertFalse(is_super_admin_user({"role": "admin"}))
  14. def test_none(self):
  15. self.assertFalse(is_super_admin_user(None))
  16. class TestAssertRouteWritable(unittest.TestCase):
  17. def test_missing_route(self):
  18. db = MagicMock()
  19. db.query.return_value.filter.return_value.first.return_value = None
  20. with self.assertRaisesRegex(ValueError, "路线不存在"):
  21. assert_route_writable(db, "r1", {"role": "admin"})
  22. def test_builtin_blocks_non_super(self):
  23. db = MagicMock()
  24. route = SimpleNamespace(id="r1", is_builtin="1", route_id=None)
  25. db.query.return_value.filter.return_value.first.return_value = route
  26. with self.assertRaisesRegex(ValueError, "内置模版"):
  27. assert_route_writable(db, "r1", {"role": "admin"})
  28. def test_builtin_allows_super(self):
  29. db = MagicMock()
  30. route = SimpleNamespace(id="r1", is_builtin="1")
  31. db.query.return_value.filter.return_value.first.return_value = route
  32. self.assertIs(assert_route_writable(db, "r1", {"role": "super_admin"}), route)
  33. def test_normal_allows_admin(self):
  34. db = MagicMock()
  35. route = SimpleNamespace(id="r1", is_builtin="0")
  36. db.query.return_value.filter.return_value.first.return_value = route
  37. self.assertIs(assert_route_writable(db, "r1", {"role": "admin"}), route)
  38. class TestAssertStepRouteWritable(unittest.TestCase):
  39. def test_missing_step(self):
  40. db = MagicMock()
  41. db.query.return_value.filter.return_value.first.return_value = None
  42. with self.assertRaisesRegex(ValueError, "步骤不存在"):
  43. assert_step_route_writable(db, "s1", {"role": "admin"})
  44. if __name__ == "__main__":
  45. unittest.main()