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

39 lines
1.9 KiB
Python

"""采样确认的详情编辑必须能通过岗位矩阵独立授权。"""
import unittest
from unittest.mock import patch
from flask import Flask, session
from routes import auth
class SpotConfirmationPermissionTest(unittest.TestCase):
def setUp(self):
self.app = Flask(__name__)
self.app.secret_key = 'test'
def test_matrix_exposes_edit_separately_from_view_and_import(self):
features = {item['id'] for item in auth.PAGE_FEATURES['spot_confirmation']}
self.assertEqual(features, {'view', 'edit', 'import', 'delete'})
def test_position_grant_and_user_deny_use_same_runtime_permission(self):
for position_value, user_value, expected in (
(1, None, True), (0, None, False), (1, 0, False), (None, None, False)
):
with self.subTest(position=position_value, user=user_value):
def query(sql, params=None):
if 'FROM user_permissions' in sql:
return [] if user_value is None else [{'permission': user_value}]
if 'FROM position_operation_permissions' in sql:
self.assertEqual(params[0], 'procurement_follower')
self.assertIn('spot_confirmation', params)
self.assertIn('edit', params)
return [] if position_value is None else [{'permission': position_value}]
return []
with self.app.test_request_context(), \
patch.object(auth, 'query', side_effect=query), \
patch.object(auth, 'ensure_position_permissions'), \
patch.object(auth, 'user_position_code', return_value='procurement_follower'):
session.update(user_id=23, role='viewer')
self.assertEqual(auth.operation_required('spot_confirmation', 'edit'), expected)