"""集成测试:已迁移端点的权限检查""" import pytest import uuid from fastapi.testclient import TestClient from sqlalchemy.ext.asyncio import AsyncSession from app.core.project_permissions import role_has_api_permission from app.models.api_endpoint_permission import ApiEndpointPermission @pytest.mark.asyncio async def test_create_subject_with_api_permission(db_session: AsyncSession): """测试创建参与者 - 使用接口级权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="CRA", endpoint_key="POST:/subjects", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "CRA", "POST:/subjects" ) assert result is True @pytest.mark.asyncio async def test_create_subject_without_permission(db_session: AsyncSession): """测试创建参与者 - 权限不足""" study_id = uuid.uuid4() # 创建权限(拒绝) perm = ApiEndpointPermission( study_id=study_id, role="PV", endpoint_key="POST:/subjects", allowed=False, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PV", "POST:/subjects" ) assert result is False @pytest.mark.asyncio async def test_list_subjects_with_permission(db_session: AsyncSession): """测试查询参与者列表 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="CRA", endpoint_key="GET:/subjects", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "CRA", "GET:/subjects" ) assert result is True @pytest.mark.asyncio async def test_get_subject_detail_with_permission(db_session: AsyncSession): """测试查询参与者详情 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PV", endpoint_key="GET:/subjects/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PV", "GET:/subjects/{id}" ) assert result is True @pytest.mark.asyncio async def test_update_subject_with_permission(db_session: AsyncSession): """测试更新参与者 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="CRA", endpoint_key="PATCH:/subjects/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "CRA", "PATCH:/subjects/{id}" ) assert result is True @pytest.mark.asyncio async def test_delete_subject_with_permission(db_session: AsyncSession): """测试删除参与者 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="DELETE:/subjects/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "DELETE:/subjects/{id}" ) assert result is True @pytest.mark.asyncio async def test_create_risk_issue_with_permission(db_session: AsyncSession): """测试创建不良事件 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="CRA", endpoint_key="POST:/risk-issues", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "CRA", "POST:/risk-issues" ) assert result is True @pytest.mark.asyncio async def test_list_risk_issues_with_permission(db_session: AsyncSession): """测试查询不良事件列表 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PV", endpoint_key="GET:/risk-issues", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PV", "GET:/risk-issues" ) assert result is True @pytest.mark.asyncio async def test_get_risk_issue_detail_with_permission(db_session: AsyncSession): """测试查询不良事件详情 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="MEDICAL_REVIEW", endpoint_key="GET:/risk-issues/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "MEDICAL_REVIEW", "GET:/risk-issues/{id}" ) assert result is True @pytest.mark.asyncio async def test_create_fee_contract_with_permission(db_session: AsyncSession): """测试创建费用合同 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="POST:/fees/contracts", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "POST:/fees/contracts" ) assert result is True @pytest.mark.asyncio async def test_list_fee_contracts_with_permission(db_session: AsyncSession): """测试查询费用合同列表 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="CRA", endpoint_key="GET:/fees/contracts", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "CRA", "GET:/fees/contracts" ) assert result is True @pytest.mark.asyncio async def test_get_fee_contract_detail_with_permission(db_session: AsyncSession): """测试查询费用合同详情 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="IMP", endpoint_key="GET:/fees/contracts/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "IMP", "GET:/fees/contracts/{id}" ) assert result is True @pytest.mark.asyncio async def test_update_fee_contract_with_permission(db_session: AsyncSession): """测试更新费用合同 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="PATCH:/fees/contracts/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "PATCH:/fees/contracts/{id}" ) assert result is True @pytest.mark.asyncio async def test_delete_fee_contract_with_permission(db_session: AsyncSession): """测试删除费用合同 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="DELETE:/fees/contracts/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "DELETE:/fees/contracts/{id}" ) assert result is True @pytest.mark.asyncio async def test_create_fee_payment_with_permission(db_session: AsyncSession): """测试创建费用分期 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="POST:/fees/contracts/{id}/payments", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "POST:/fees/contracts/{id}/payments" ) assert result is True @pytest.mark.asyncio async def test_update_fee_payment_with_permission(db_session: AsyncSession): """测试更新费用分期 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="PATCH:/fees/payments/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "PATCH:/fees/payments/{id}" ) assert result is True @pytest.mark.asyncio async def test_delete_fee_payment_with_permission(db_session: AsyncSession): """测试删除费用分期 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="DELETE:/fees/payments/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "DELETE:/fees/payments/{id}" ) assert result is True @pytest.mark.asyncio async def test_create_finance_contract_with_permission(db_session: AsyncSession): """测试创建财务合同 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="POST:/finance/contracts", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "POST:/finance/contracts" ) assert result is True @pytest.mark.asyncio async def test_list_finance_contracts_with_permission(db_session: AsyncSession): """测试查询财务合同列表 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="CRA", endpoint_key="GET:/finance/contracts", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "CRA", "GET:/finance/contracts" ) assert result is True @pytest.mark.asyncio async def test_get_finance_contract_detail_with_permission(db_session: AsyncSession): """测试查询财务合同详情 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="IMP", endpoint_key="GET:/finance/contracts/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "IMP", "GET:/finance/contracts/{id}" ) assert result is True @pytest.mark.asyncio async def test_update_finance_contract_with_permission(db_session: AsyncSession): """测试更新财务合同 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="PATCH:/finance/contracts/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "PATCH:/finance/contracts/{id}" ) assert result is True @pytest.mark.asyncio async def test_delete_finance_contract_with_permission(db_session: AsyncSession): """测试删除财务合同 - 有权限""" study_id = uuid.uuid4() # 创建权限 perm = ApiEndpointPermission( study_id=study_id, role="PM", endpoint_key="DELETE:/finance/contracts/{id}", allowed=True, ) db_session.add(perm) await db_session.commit() # 验证权限 result = await role_has_api_permission( db_session, study_id, "PM", "DELETE:/finance/contracts/{id}" ) assert result is True