186 lines
6.7 KiB
Python
186 lines
6.7 KiB
Python
"""
|
|
角色管理测试用例
|
|
"""
|
|
|
|
import pytest
|
|
from api.role_api import RoleAPI
|
|
|
|
|
|
@pytest.mark.role
|
|
@pytest.mark.regression
|
|
class TestRole:
|
|
"""角色管理测试类"""
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_create_role_success(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试创建角色成功"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
response = await role_api.create_role(test_role_data)
|
|
|
|
assert response.status_code == 201
|
|
data = response.json()
|
|
assert "id" in data
|
|
assert data["name"] == test_role_data["name"]
|
|
assert data["description"] == test_role_data["description"]
|
|
assert data["permissions"] == test_role_data["permissions"]
|
|
|
|
cleanup_role.append(data["id"])
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_create_role_duplicate_name(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试创建重复角色名"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
create_response = await role_api.create_role(test_role_data)
|
|
role_id = create_response.json()["id"]
|
|
|
|
response = await role_api.create_role(test_role_data)
|
|
|
|
assert response.status_code in [400, 409]
|
|
|
|
cleanup_role.append(role_id)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_role_by_id_success(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试根据ID获取角色成功"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
create_response = await role_api.create_role(test_role_data)
|
|
role_id = create_response.json()["id"]
|
|
|
|
response = await role_api.get_role_by_id(role_id)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["id"] == role_id
|
|
assert data["name"] == test_role_data["name"]
|
|
|
|
cleanup_role.append(role_id)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_role_by_id_not_found(self, authenticated_client):
|
|
"""测试获取不存在的角色"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
response = await role_api.get_role_by_id(999999)
|
|
|
|
assert response.status_code == 404
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_role_by_name_success(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试根据名称获取角色成功"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
create_response = await role_api.create_role(test_role_data)
|
|
role_id = create_response.json()["id"]
|
|
|
|
response = await role_api.get_role_by_name(test_role_data["name"])
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["name"] == test_role_data["name"]
|
|
|
|
cleanup_role.append(role_id)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_all_roles_success(self, authenticated_client):
|
|
"""测试获取所有角色成功"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
response = await role_api.get_all_roles()
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert isinstance(data, list)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_update_role_success(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试更新角色成功"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
create_response = await role_api.create_role(test_role_data)
|
|
role_id = create_response.json()["id"]
|
|
|
|
update_data = {"description": "Updated description"}
|
|
response = await role_api.update_role(role_id, update_data)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["description"] == "Updated description"
|
|
|
|
cleanup_role.append(role_id)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_delete_role_success(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试删除角色成功"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
create_response = await role_api.create_role(test_role_data)
|
|
role_id = create_response.json()["id"]
|
|
|
|
response = await role_api.delete_role(role_id)
|
|
|
|
assert response.status_code == 204
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_logical_delete_role_success(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试逻辑删除角色成功"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
create_response = await role_api.create_role(test_role_data)
|
|
role_id = create_response.json()["id"]
|
|
|
|
response = await role_api.logical_delete_role(role_id)
|
|
|
|
assert response.status_code == 200
|
|
|
|
get_response = await role_api.get_role_by_id(role_id)
|
|
assert get_response.status_code == 404
|
|
|
|
get_deleted_response = await role_api.get_all_roles(include_deleted=True)
|
|
deleted_roles = get_deleted_response.json()
|
|
assert any(r["id"] == role_id for r in deleted_roles)
|
|
|
|
cleanup_role.append(role_id)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_restore_role_success(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试恢复角色成功"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
create_response = await role_api.create_role(test_role_data)
|
|
role_id = create_response.json()["id"]
|
|
|
|
await role_api.logical_delete_role(role_id)
|
|
|
|
response = await role_api.restore_role(role_id)
|
|
|
|
assert response.status_code == 200
|
|
|
|
get_response = await role_api.get_role_by_id(role_id)
|
|
assert get_response.status_code == 200
|
|
|
|
cleanup_role.append(role_id)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_check_name_exists_true(self, authenticated_client, test_role_data, cleanup_role):
|
|
"""测试检查角色名存在-返回true"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
create_response = await role_api.create_role(test_role_data)
|
|
role_id = create_response.json()["id"]
|
|
|
|
response = await role_api.check_name_exists(test_role_data["name"])
|
|
|
|
assert response.status_code == 200
|
|
assert response.json() is True
|
|
|
|
cleanup_role.append(role_id)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_check_name_exists_false(self, authenticated_client):
|
|
"""测试检查角色名存在-返回false"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
response = await role_api.check_name_exists("NONEXISTENT_ROLE")
|
|
|
|
assert response.status_code == 200
|
|
assert response.json() is False
|