fastfood/tests/test_api.py

131 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import pytest
from httpx import AsyncClient
url = "http://localhost:8000/api/v1/menus"
class TestCrud:
class Menu:
@staticmethod
async def read_all(app):
"""чтение всех меню"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.get("/")
return response.status_code, response.json()
@staticmethod
async def get(app, data):
"""Получение меню по id"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.get(f"/{data.get('id')}")
return response.status_code, response.json()
@staticmethod
async def write(app, data):
"""создания меню"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.post("/", json=data)
return response.status_code, response.json()
@staticmethod
async def update(app, data):
"""Обновление меню по id"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.patch(f"/{data.get('id')}", json=data)
return response.status_code, response.json()
@staticmethod
async def delete(app, data):
"""Удаление меню по id"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.delete(f"/{data.get('id')}")
class Submenu:
@staticmethod
async def read_all(app, menu):
"""чтение всех меню"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.get(f"/{menu.get('id')}/submenus/")
print(response)
return response.status_code, response.json()
@staticmethod
async def get(app, menu, submenu):
"""Получение меню по id"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.get(
f"/{menu.get('id')}/submenus/{submenu.get('id')}",
)
return response.status_code, response.json()
@staticmethod
async def write(app, menu, submenu):
"""создания меню"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.post(
f"/{menu.get('id')}/submenus/", json=submenu,
)
return response.status_code, response.json()
@staticmethod
async def update(app, menu, submenu):
"""Обновление меню по id"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.patch(
f"/{menu.get('id')}/submenus/{submenu.get('id')}",
json=submenu,
)
return response.status_code, response.json()
@staticmethod
async def delete(app, menu, submenu):
"""Удаление меню по id"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.delete(f"/{menu.get('id')}/submenus/{submenu.get('id')}")
@pytest.mark.asyncio
async def test_menu_crud(self, app):
"""Тестирование функций меню"""
code, rspn = await self.Menu.read_all(app)
assert code == 200
data = {"title": "Menu", "description": None}
code, rspn = await self.Menu.write(app, data)
assert code == 201
assert rspn["title"] == "Menu"
assert rspn["description"] is None
code, menu = await self.Menu.get(app, {"id": rspn.get("id")})
assert code == 200
assert menu["title"] == rspn["title"]
upd_data = {
"id": rspn.get("id"), "title": "upd Menu", "description": "",
}
code, upd_rspn = await self.Menu.update(app, upd_data)
assert code == 200
assert upd_rspn["title"] == "upd Menu"
code = await self.Menu.delete(app, rspn)
code, menu = await self.Menu.get(app, {"id": rspn.get("id")})
assert code == 404
@pytest.mark.asyncio
async def test_submenu(self, app):
menu = {"title": "Menu", "description": "main menu"}
code, rspn = await self.Menu.write(app, menu)
assert code == 201
menu.update(rspn)
print(menu)
code, rspn = await self.Submenu.read_all(app, menu)
assert code == 200
assert rspn == []
class TestСontinuity:
@pytest.mark.asyncio
async def test_postman_continuity(self, app):
async with AsyncClient(app=app, base_url=url) as ac:
pass