"""权限配置 P2:版本、回滚与职责冲突检查。""" import unittest from pathlib import Path from routes.auth import _detect_permission_conflicts 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') class PermissionP2Test(unittest.TestCase): def test_confirm_and_rollback_conflict_is_detected(self): conflicts = _detect_permission_conflicts({ 'purchase_pending.batch_confirm', 'purchase_backup.rollback', }) self.assertEqual(len(conflicts), 1) self.assertEqual(conflicts[0]['id'], 'confirm_and_rollback') self.assertEqual(conflicts[0]['level'], '高') def test_non_conflicting_permissions_are_allowed(self): self.assertEqual(_detect_permission_conflicts({'planning.view'}), []) def test_version_and_rollback_endpoints_exist(self): self.assertIn('CREATE TABLE IF NOT EXISTS permission_versions', AUTH) self.assertIn("@auth_bp.route('/api/permissions/versions')", AUTH) self.assertIn("@auth_bp.route('/api/permissions/versions/compare')", AUTH) self.assertIn("@auth_bp.route('/api/permissions/versions/rollback', methods=['POST'])", AUTH) self.assertIn('_restore_permission_snapshot', AUTH) def test_conflict_check_is_enforced_on_saves(self): self.assertIn("@auth_bp.route('/api/permissions/conflicts/check', methods=['POST'])", AUTH) self.assertIn('confirm_conflicts', AUTH) self.assertIn('_permissionConflictMessage', APP) def test_version_ui_is_available_for_roles_and_users(self): self.assertIn('openPermissionVersionModal', APP) self.assertIn('comparePermissionVersions', APP) self.assertIn('rollbackPermissionVersion', APP) self.assertIn('权限版本与回滚', APP) if __name__ == '__main__': unittest.main()