feat: update audit platform workspace
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
"""内部公文权限控制测试。"""
|
||||
|
||||
import pytest
|
||||
from starlette.responses import JSONResponse
|
||||
|
||||
from fastapi_modules.fastapi_leaudit.controllers.govdocController import GovdocController
|
||||
|
||||
|
||||
class _DenyPermissionService:
|
||||
"""拒绝所有权限的测试权限服务。"""
|
||||
|
||||
async def CheckPermission(self, user_id: int, permission_key: str) -> bool:
|
||||
"""检查权限。"""
|
||||
return False
|
||||
|
||||
|
||||
class _AllowPermissionService:
|
||||
"""允许所有权限的测试权限服务。"""
|
||||
|
||||
async def CheckPermission(self, user_id: int, permission_key: str) -> bool:
|
||||
"""检查权限。"""
|
||||
return True
|
||||
|
||||
|
||||
class _FakeGovdocService:
|
||||
"""记录调用的测试公文服务。"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.list_called = False
|
||||
self.upload_called = False
|
||||
|
||||
async def ListDocuments(self, **kwargs):
|
||||
"""记录列表调用。"""
|
||||
self.list_called = True
|
||||
return {"items": [], "total": 0, "page": kwargs["page"], "pageSize": kwargs["pageSize"]}
|
||||
|
||||
async def UploadDocument(self, **kwargs):
|
||||
"""记录上传调用。"""
|
||||
self.upload_called = True
|
||||
return {"documentId": 1}
|
||||
|
||||
|
||||
def _find_endpoint(controller: GovdocController, path: str, method: str):
|
||||
"""根据路径和方法查找路由 endpoint。"""
|
||||
full_path = f"{controller.router.prefix}{path}"
|
||||
for route in controller.router.routes:
|
||||
if getattr(route, "path", "") == full_path and method in getattr(route, "methods", set()):
|
||||
return route.endpoint
|
||||
raise AssertionError(f"未找到路由 {method} {full_path}")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_govdoc_list_requires_document_read_permission():
|
||||
"""公文列表无查看权限时返回 403,且不调用业务服务。"""
|
||||
controller = GovdocController()
|
||||
service = _FakeGovdocService()
|
||||
controller.GovdocService = service
|
||||
controller.PermissionService = _DenyPermissionService()
|
||||
endpoint = _find_endpoint(controller, "/documents", "GET")
|
||||
|
||||
response = await endpoint(
|
||||
page=1,
|
||||
pageSize=20,
|
||||
keyword=None,
|
||||
fileExt=None,
|
||||
region=None,
|
||||
tenant_code=None,
|
||||
entry_module_id=None,
|
||||
type_ids=None,
|
||||
document_type_id=None,
|
||||
status=None,
|
||||
resultStatus=None,
|
||||
createdBy=None,
|
||||
dateFrom=None,
|
||||
dateTo=None,
|
||||
payload={"user_id": 7},
|
||||
)
|
||||
|
||||
assert isinstance(response, JSONResponse)
|
||||
assert response.status_code == 403
|
||||
assert service.list_called is False
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_govdoc_upload_requires_document_create_permission():
|
||||
"""公文上传无创建权限时返回 403,且不调用业务服务。"""
|
||||
controller = GovdocController()
|
||||
service = _FakeGovdocService()
|
||||
controller.GovdocService = service
|
||||
controller.PermissionService = _DenyPermissionService()
|
||||
endpoint = _find_endpoint(controller, "/documents", "POST")
|
||||
|
||||
response = await endpoint(file=object(), payload={"user_id": 7})
|
||||
|
||||
assert isinstance(response, JSONResponse)
|
||||
assert response.status_code == 403
|
||||
assert service.upload_called is False
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_govdoc_list_calls_service_when_permission_granted():
|
||||
"""公文列表有查看权限时正常调用业务服务。"""
|
||||
controller = GovdocController()
|
||||
service = _FakeGovdocService()
|
||||
controller.GovdocService = service
|
||||
controller.PermissionService = _AllowPermissionService()
|
||||
endpoint = _find_endpoint(controller, "/documents", "GET")
|
||||
|
||||
response = await endpoint(
|
||||
page=1,
|
||||
pageSize=20,
|
||||
keyword=None,
|
||||
fileExt=None,
|
||||
region=None,
|
||||
tenant_code=None,
|
||||
entry_module_id=None,
|
||||
type_ids=None,
|
||||
document_type_id=None,
|
||||
status=None,
|
||||
resultStatus=None,
|
||||
createdBy=None,
|
||||
dateFrom=None,
|
||||
dateTo=None,
|
||||
payload={"user_id": 7},
|
||||
)
|
||||
|
||||
assert response.data["total"] == 0
|
||||
assert service.list_called is True
|
||||
Reference in New Issue
Block a user