131 lines
4.8 KiB
Python
131 lines
4.8 KiB
Python
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
|