dy-dashboard/tests/test_permission_p2.py
2026-10-28 11:14:17 +08:00

46 lines
1.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""权限配置 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()