101 lines
3.2 KiB
Python
101 lines
3.2 KiB
Python
from uuid import UUID
|
||
|
||
import pytest
|
||
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
||
from fastfood.cruds.menu import MenuCrud
|
||
from fastfood.cruds.submenu import SubMenuCrud
|
||
from fastfood.models import Menu, SubMenu
|
||
from fastfood.schemas import Menu as menuschema
|
||
from fastfood.schemas import MenuBase as menubaseschema
|
||
|
||
|
||
@pytest.mark.asyncio
|
||
async def test_menu(asession: AsyncSession) -> None:
|
||
async with asession:
|
||
# Создаем меню
|
||
menu: Menu = Menu(title="SomeMenu", description="SomeDescription")
|
||
menu: Menu = await MenuCrud.create_menu_item(
|
||
menubaseschema.model_validate(menu),
|
||
asession,
|
||
)
|
||
menu_id: UUID = menu.id
|
||
|
||
# Получаем его же
|
||
req_menu: Menu | None = await MenuCrud.get_menu_item(menu_id, asession)
|
||
assert menu == req_menu
|
||
|
||
# Получаем все меню и проверяем
|
||
req_menus = await MenuCrud.get_menus(asession)
|
||
assert menu == req_menus.scalars().all()[0]
|
||
|
||
# Обновляем
|
||
menu.title = "updatedMenu"
|
||
await MenuCrud.update_menu_item(
|
||
menu.id, menuschema.model_validate(menu), asession
|
||
)
|
||
# И сверяем
|
||
req_menu = await MenuCrud.get_menu_item(menu_id, asession)
|
||
assert menu == req_menu
|
||
|
||
# Удаляем и проверяем
|
||
await MenuCrud.delete_menu_item(menu_id, asession)
|
||
req_menus = await MenuCrud.get_menus(asession)
|
||
assert req_menus.all() == []
|
||
|
||
|
||
@pytest.mark.asyncio
|
||
async def test_submenu(asession: AsyncSession) -> None:
|
||
async with asession:
|
||
# Создаем меню напрямую
|
||
menu: Menu = Menu(title="SomeMenu", description="SomeDescription")
|
||
asession.add(menu)
|
||
await asession.commit()
|
||
await asession.refresh(menu)
|
||
menu_id: UUID = menu.id
|
||
|
||
# Создаем подменю
|
||
submenu: SubMenu = SubMenu(
|
||
title="submenu",
|
||
description="",
|
||
parent_menu=menu_id,
|
||
)
|
||
submenu = await SubMenuCrud.create_submenu_item(
|
||
menu_id,
|
||
menubaseschema.model_validate(submenu),
|
||
asession,
|
||
)
|
||
submenu_id = submenu.id
|
||
|
||
# Проверяем подменю
|
||
req_submenu = await SubMenuCrud.get_submenu_item(
|
||
menu_id, submenu.id, asession,
|
||
)
|
||
assert submenu == req_submenu
|
||
|
||
# Обновляем меню
|
||
submenu.title = "UpdatedSubmenu"
|
||
req_submenu = await SubMenuCrud.update_submenu_item(
|
||
submenu_id, menubaseschema.model_validate(submenu), asession,
|
||
)
|
||
assert submenu == req_submenu.scalar_one_or_none()
|
||
|
||
menu = await MenuCrud.get_menu_item(menu_id, asession)
|
||
assert 1 == menu.submenus_count
|
||
|
||
# Удаляем полменю
|
||
await SubMenuCrud.delete_submenu_item(submenu_id, asession)
|
||
|
||
menu = await MenuCrud.get_menu_item(menu_id, asession)
|
||
assert 0 == menu.submenus_count
|
||
|
||
await MenuCrud.delete_menu_item(menu_id, asession)
|
||
|
||
|
||
@pytest.mark.skip
|
||
@pytest.mark.asyncio
|
||
async def test_dish(asession: AsyncSession):
|
||
"""Not Implemented yet"""
|
||
async with asession:
|
||
pass
|