import pytest from httpx import AsyncClient from .repository import Repository as Repo @pytest.mark.asyncio async def test_menu_crud_empty(client: AsyncClient) -> None: """Тестирование функций меню""" code, rspn = await Repo.Menu.read_all(client) assert code == 200 assert rspn == [] @pytest.mark.asyncio async def test_menu_crud_add(client: AsyncClient) -> None: """Тестирование функций меню""" data = {"title": "Menu", "description": None} code, rspn = await Repo.Menu.write(client, data) assert code == 201 assert rspn["title"] == "Menu" assert rspn["description"] is None await Repo.Menu.delete(client, rspn) @pytest.mark.asyncio async def test_menu_crud_get(client: AsyncClient) -> None: """Тестирование функций меню""" data = {"title": "Menu", "description": None} code, rspn = await Repo.Menu.write(client, data) code, menu = await Repo.Menu.get(client, {"id": rspn.get("id")}) assert code == 200 assert menu["title"] == rspn["title"] await Repo.Menu.delete(client, menu) @pytest.mark.asyncio async def test_menu_crud_update(client: AsyncClient) -> None: """Тестирование функций меню""" data = {"title": "Menu", "description": None} code, rspn = await Repo.Menu.write(client, data) upd_data = { "id": rspn.get("id"), "title": "upd Menu", "description": "", } code, upd_rspn = await Repo.Menu.update(client, upd_data) assert code == 200 assert upd_rspn["title"] == "upd Menu" await Repo.Menu.delete(client, upd_rspn) @pytest.mark.asyncio async def test_menu_crud_delete(client: AsyncClient) -> None: """Тестирование функций меню""" data = {"title": "Menu", "description": None} code, rspn = await Repo.Menu.write(client, data) code = await Repo.Menu.delete(client, rspn) assert code == 200 code, rspn = await Repo.Menu.get(client, {"id": rspn.get("id")}) assert code == 404 @pytest.mark.asyncio async def test_menu_crud_get_all(client: AsyncClient) -> None: """Тестирование функций меню""" code, rspn = await Repo.Menu.read_all(client) assert code == 200 assert rspn == [] data = {"title": "Menu", "description": None} code, rspn = await Repo.Menu.write(client, data) code, upd_rspn = await Repo.Menu.read_all(client) assert code == 200 assert upd_rspn == [rspn] await Repo.Menu.delete(client, rspn) @pytest.mark.asyncio async def test_submenus_get_all(client) -> None: # Создаем меню и проверяем ответ menu = {"title": "Menu", "description": "main menu"} code, rspn = await Repo.Menu.write(client, menu) assert code == 201 menu.update(rspn) # Проверяем наличие подменю code, rspn = await Repo.Submenu.read_all(client, menu) assert code == 200 assert rspn == [] # Создаем и проверяем подменю submenu = { "title": "Submenu", "description": "submenu", "parent_menu": menu["id"], } code, rspn = await Repo.Submenu.write(client, menu, submenu) submenu.update(rspn) # Проверяем наличие подменю code, upd_rspn = await Repo.Submenu.read_all(client, menu) assert code == 200 assert upd_rspn == [rspn] # удаляем сопутствующее await Repo.Submenu.delete(client, menu, submenu) await Repo.Menu.delete(client, menu) @pytest.mark.asyncio async def test_submenus_add(client) -> None: # Создаем меню и проверяем ответ menu = {"title": "Menu", "description": "main menu"} code, rspn = await Repo.Menu.write(client, menu) menu.update(rspn) # Создаем и проверяем подменю submenu = { "title": "Submenu", "description": "submenu", "parent_menu": menu["id"], } code, rspn = await Repo.Submenu.write(client, menu, submenu) assert code == 201 submenu.update(rspn) # удаляем сопутствующее await Repo.Submenu.delete(client, menu, submenu) await Repo.Menu.delete(client, menu) @pytest.mark.asyncio async def test_submenus_update(client) -> None: # Создаем меню и проверяем ответ menu = {"title": "Menu", "description": "main menu"} code, rspn = await Repo.Menu.write(client, menu) menu.update(rspn) # Создаем и проверяем подменю submenu = { "title": "Submenu", "description": "submenu", "parent_menu": menu["id"], } code, rspn = await Repo.Submenu.write(client, menu, submenu) submenu.update(rspn) # Обновляем подменю и проверяем submenu["title"] = "updated_submenu" code, rspn = await Repo.Submenu.update(client, menu, submenu) assert code == 200 assert submenu["title"] == rspn["title"] submenu.update(rspn) # удаляем сопутствующее await Repo.Submenu.delete(client, menu, submenu) await Repo.Menu.delete(client, menu) @pytest.mark.asyncio async def test_submenus_delete(client) -> None: # Создаем меню и проверяем ответ menu = {"title": "Menu", "description": "main menu"} code, rspn = await Repo.Menu.write(client, menu) menu.update(rspn) # Создаем и проверяем подменю submenu = { "title": "Submenu", "description": "submenu", "parent_menu": menu["id"], } code, rspn = await Repo.Submenu.write(client, menu, submenu) submenu.update(rspn) # Удаляем подменю code = await Repo.Submenu.delete(client, menu, submenu) assert code == 200 # Проверяем удаленное подменю code, rspn = await Repo.Submenu.get(client, menu, submenu) assert code == 404 # удаляем сопутствующее await Repo.Menu.delete(client, menu) @pytest.mark.asyncio async def test_dishes_get_all(client: AsyncClient) -> None: # Создаем меню и проверяем ответ menu = { "title": "Menu", "description": "main menu", } code, rspn = await Repo.Menu.write(client, menu) menu.update(rspn) # Создаем и проверяем подменю submenu = { "title": "Submenu", "description": "submenu", "parent_menu": menu["id"], } code, rspn = await Repo.Submenu.write(client, menu, submenu) submenu.update(rspn) # Проверяем все блюда в подменю code, rspn = await Repo.Dish.read_all(client, menu, submenu) assert code == 200 assert rspn == [] # Добавляем блюдо dish = { "title": "dish", "description": "some dish", "price": "12.5", "parent_submenu": submenu["id"], } code, rspn = await Repo.Dish.write(client, menu, submenu, dish) assert code == 201 dish.update(rspn) code, upd_rspn = await Repo.Dish.read_all(client, menu, submenu) assert code == 200 # удаляем сопутствующее await Repo.Dish.delete(client, menu, submenu, dish) await Repo.Submenu.delete(client, menu, submenu) await Repo.Menu.delete(client, menu) @pytest.mark.asyncio async def test_dishes_add(client: AsyncClient) -> None: # Создаем меню и проверяем ответ menu = { "title": "Menu", "description": "main menu", } code, rspn = await Repo.Menu.write(client, menu) menu.update(rspn) # Создаем и проверяем подменю submenu = { "title": "Submenu", "description": "submenu", "parent_menu": menu["id"], } code, rspn = await Repo.Submenu.write(client, menu, submenu) submenu.update(rspn) # Добавляем блюдо dish = { "title": "dish", "description": "some dish", "price": "12.5", "parent_submenu": submenu["id"], } code, rspn = await Repo.Dish.write(client, menu, submenu, dish) assert code == 201 dish.update(rspn) # Получаем блюдо code, rspn = await Repo.Dish.get(client, menu, submenu, dish) assert code == 200 assert rspn["title"] == dish["title"] # удаляем сопутствующее await Repo.Dish.delete(client, menu, submenu, dish) await Repo.Submenu.delete(client, menu, submenu) await Repo.Menu.delete(client, menu) @pytest.mark.asyncio async def test_dishes_update(client: AsyncClient) -> None: # Создаем меню и проверяем ответ menu = { "title": "Menu", "description": "main menu", } code, rspn = await Repo.Menu.write(client, menu) menu.update(rspn) # Создаем и проверяем подменю submenu = { "title": "Submenu", "description": "submenu", "parent_menu": menu["id"], } code, rspn = await Repo.Submenu.write(client, menu, submenu) submenu.update(rspn) # Добавляем блюдо dish = { "title": "dish", "description": "some dish", "price": "12.5", "parent_submenu": submenu["id"], } code, rspn = await Repo.Dish.write(client, menu, submenu, dish) dish.update(rspn) # Обновляем блюдо и проверяем dish["title"] = "updated_dish" code, rspn = await Repo.Dish.update(client, menu, submenu, dish) assert code == 200 assert dish["title"] == rspn["title"] dish.update(rspn) # удаляем сопутствующее await Repo.Dish.delete(client, menu, submenu, dish) await Repo.Submenu.delete(client, menu, submenu) await Repo.Menu.delete(client, menu) @pytest.mark.asyncio async def test_dishes_delete(client: AsyncClient) -> None: # Создаем меню и проверяем ответ menu = { "title": "Menu", "description": "main menu", } code, rspn = await Repo.Menu.write(client, menu) menu.update(rspn) # Создаем и проверяем подменю submenu = { "title": "Submenu", "description": "submenu", "parent_menu": menu["id"], } code, rspn = await Repo.Submenu.write(client, menu, submenu) submenu.update(rspn) # Добавляем блюдо dish = { "title": "dish", "description": "some dish", "price": "12.5", "parent_submenu": submenu["id"], } code, rspn = await Repo.Dish.write(client, menu, submenu, dish) dish.update(rspn) # Удаляем подменю code = await Repo.Dish.delete(client, menu, submenu, dish) assert code == 200 # Проверяем удаленное блюдо code, rspn = await Repo.Dish.get(client, menu, submenu, dish) assert code == 404 # удаляем сопутствующее await Repo.Submenu.delete(client, menu, submenu) await Repo.Menu.delete(client, menu)