from pytest import mark @mark.parametrize( "menu, is_created", [((False, False), False), ((True, True), True)], ids=["Get empty menu list", "Get non-empty menu list"], indirect=["menu"], ) async def test_get_menu_list(client, menu, is_created: bool): response = await client.get("menu/") assert response.status_code == 200 if is_created: expected = [menu.to_json()] else: expected = [] assert response.json() == expected @mark.parametrize( "menu", [(False, True, False, False), (False, True, False, None)], ids=["Post menu with description", "Post menu without description"], indirect=True, ) async def test_post_menu_add(client, menu): response = await client.post("menu/", json=menu.to_json()) assert response.status_code == 200 assert response.json() == menu.to_json() @mark.parametrize( "menu, json", [ ((True, True), {"title": "updated_title"}), ((True, True), {"title": "updated_title", "description": "updated_description"}), ((True, True), {"title": "updated_title", "description": None}), ], ids=[ "Update menu title", "Update menu title and description", "Update menu title and description to None", ], indirect=["menu"], ) async def test_update_menu(client, menu, json): response = await client.patch(f"menu/{menu.id}", json=json) assert response.status_code == 200 assert response.json() == { "id": str(menu.id), "title": json.get("title"), "description": json.get("description", None), } @mark.parametrize( "menu", [(True, False)], ids=["Delete menu"], indirect=True, ) async def test_delete_menu(client, menu): response = await client.delete(f"menu/{menu.id}") assert response.status_code == 204