39 lines
1.9 KiB
Python
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)
|