319 lines
7.9 KiB
Python
319 lines
7.9 KiB
Python
"""集成测试:已迁移端点的权限检查"""
|
|
|
|
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="subjects:create",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "CRA", "subjects:create"
|
|
)
|
|
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="subjects:create",
|
|
allowed=False,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "PV", "subjects:create"
|
|
)
|
|
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="subjects:list",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "CRA", "subjects:list"
|
|
)
|
|
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="subjects:read",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "PV", "subjects:read"
|
|
)
|
|
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="subjects:update",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "CRA", "subjects:update"
|
|
)
|
|
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="subjects:delete",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "PM", "subjects:delete"
|
|
)
|
|
assert result is True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_create_subject_ae_with_permission(db_session: AsyncSession):
|
|
"""测试创建参与者AE - 有权限"""
|
|
study_id = uuid.uuid4()
|
|
|
|
# 创建权限
|
|
perm = ApiEndpointPermission(
|
|
study_id=study_id,
|
|
role="CRA",
|
|
endpoint_key="subject_aes:create",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "CRA", "subject_aes:create"
|
|
)
|
|
assert result is True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_list_subject_aes_with_permission(db_session: AsyncSession):
|
|
"""测试查询参与者AE列表 - 有权限"""
|
|
study_id = uuid.uuid4()
|
|
|
|
# 创建权限
|
|
perm = ApiEndpointPermission(
|
|
study_id=study_id,
|
|
role="PV",
|
|
endpoint_key="subject_aes:list",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "PV", "subject_aes:list"
|
|
)
|
|
assert result is True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_subject_ae_detail_with_permission(db_session: AsyncSession):
|
|
"""测试查询参与者AE详情 - 有权限"""
|
|
study_id = uuid.uuid4()
|
|
|
|
# 创建权限
|
|
perm = ApiEndpointPermission(
|
|
study_id=study_id,
|
|
role="QA",
|
|
endpoint_key="subject_aes:read",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "QA", "subject_aes:read"
|
|
)
|
|
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="fees_contracts:create",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "PM", "fees_contracts:create"
|
|
)
|
|
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="fees_contracts:list",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "CRA", "fees_contracts:list"
|
|
)
|
|
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="CTA",
|
|
endpoint_key="fees_contracts:read",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "CTA", "fees_contracts:read"
|
|
)
|
|
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="fees_contracts:update",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "PM", "fees_contracts:update"
|
|
)
|
|
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="fees_contracts:delete",
|
|
allowed=True,
|
|
)
|
|
db_session.add(perm)
|
|
await db_session.commit()
|
|
|
|
# 验证权限
|
|
result = await role_has_api_permission(
|
|
db_session, study_id, "PM", "fees_contracts:delete"
|
|
)
|
|
assert result is True
|
|
|