/
YamangulovAN
/
python_advanced
Обзор
Документация
Войти
/
YamangulovAN
/
python_advanced
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
module_26_fastapi/homework/test.py
60 строк
3 KB
Andrei Iamangulov
homework module 26
07 ноя 2025, 10:43
07 ноя 2025, 10:43
72fd702
Код
Авторство
О чём код?
""" Модуль test.py Асинхронные тесты для FastAPI приложения кулинарной книги. Обеспечивает чистоту тестовой базы перед выполнением, проверяет создание, получение списка и деталей рецептов. """ import sys import os # Добавляем путь к директории с main.py для корректного импорта в PyCharm sys.path.append(os.path.abspath(os.path.dirname(__file__))) import pytest from httpx import AsyncClient, ASGITransport from main import app from database import reset_db # нужна функция, которая сбрасывает таблицы @pytest.mark.asyncio async def test_recipes_crud(): # Очистка и создание таблиц БД заново для изолированного запуска тестов await reset_db() transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://testserver") as client: # Создание нового рецепта response = await client.post("/recipes", json={ "title": "Омлет", "cooking_time": 10, "ingredients": ["яйца", "молоко", "масло"], "description": "Классический омлет на завтрак." }) assert response.status_code == 201 data = response.json() assert data["title"] == "Омлет" assert data["views"] == 0 recipe_id = data["id"] # Получение списка рецептов и проверка наличия нового рецепта response = await client.get("/recipes") assert response.status_code == 200 recipes = response.json() assert any(r["id"] == recipe_id for r in recipes) # Получение детальной информации, проверка увеличения views response = await client.get(f"/recipes/{recipe_id}") assert response.status_code == 200 detail = response.json() assert detail["title"] == "Омлет" assert detail["views"] == 1 assert sorted(detail["ingredients"]) == sorted(["яйца", "молоко", "масло"]) # Повторный просмотр детализации увеличивает views до 2 response = await client.get(f"/recipes/{recipe_id}") assert response.status_code == 200 detail = response.json() assert detail["views"] == 2