""" 角色管理测试用例 """ 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