"""角色与岗位权限矩阵分离及岗位继承。""" import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] AUTH = (ROOT / 'routes' / 'auth.py').read_text(encoding='utf-8') APP = (ROOT / 'static' / 'js' / 'app.js').read_text(encoding='utf-8') MODEL = (ROOT / 'services' / 'permission_model.py').read_text(encoding='utf-8') FIELD = (ROOT / 'services' / 'field_perms.py').read_text(encoding='utf-8') class PositionPermissionMatrixTest(unittest.TestCase): def test_role_registry_only_contains_three_system_roles(self): roles_block = AUTH[AUTH.index('def permission_roles'):AUTH.index('def permission_save')] for role in ('super_admin', 'admin', 'viewer'): self.assertIn("'id': '" + role + "'", roles_block) for legacy in ('procurement_planner', 'procurement_follower', 'product_developer', 'operator'): self.assertNotIn("'id': '" + legacy + "'", roles_block) def test_position_permission_storage_and_migration_exist(self): self.assertIn('CREATE TABLE IF NOT EXISTS position_operation_permissions', MODEL) self.assertIn('INSERT IGNORE INTO position_operation_permissions', MODEL) self.assertIn("@auth_bp.route('/api/permissions/position-operations/save'", AUTH) def test_runtime_priority_includes_position(self): self.assertIn('position_operation_permissions', AUTH) self.assertIn('岗位权限', AUTH) self.assertIn('position_perm', FIELD) def test_position_matrix_is_rendered_separately(self): self.assertIn('岗位权限矩阵', APP) self.assertIn('renderPermPositionOverview', APP) self.assertIn('/api/permissions/positions', APP) self.assertIn('/api/permissions/position-operations', APP) if __name__ == '__main__': unittest.main()