46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
"""权限配置 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()
|