This commit is contained in:
2025-03-09 17:01:54 +00:00
parent ca83ca6e2a
commit 53aeaef20f
31 changed files with 1003 additions and 459 deletions

View File

View File

View File

@@ -0,0 +1,74 @@
from uuid import uuid4
from _pytest.fixtures import SubRequest
from pytest import fixture
from sqlalchemy import delete
from sqlalchemy.ext.asyncio import AsyncSession
from fastfood_two.infrastructure.pg_storage.models import SQLAMenu
def generate_str():
return str(uuid4())
@fixture
async def menu(request: SubRequest, test_session: AsyncSession):
if request.param is not None:
id = uuid4()
title = "test_menu"
description = None
match len(request.param):
case 2:
need_create, need_delete = request.param
if not isinstance(need_create, bool):
raise ValueError
if not isinstance(need_delete, bool):
raise ValueError
case 3:
need_create, need_delete, title = request.param
if not isinstance(need_create, bool):
raise ValueError
if not isinstance(need_delete, bool):
raise ValueError
if not isinstance(title, str | bool):
raise ValueError
if isinstance(title, bool):
title = "test_menu" if not title else generate_str
case 4:
need_create, need_delete, title, description = request.param
if not isinstance(need_create, bool):
raise ValueError
if not isinstance(need_delete, bool):
raise ValueError
if not isinstance(title, str | bool):
raise ValueError
if not isinstance(description, str | bool | None):
raise ValueError
if isinstance(title, bool):
title = "test_menu" if not title else generate_str
if isinstance(description, bool):
description = "test_desc" if not description else generate_str
case _:
raise ValueError
menu = SQLAMenu(id=id, title=title, description=description)
if need_create is True:
test_session.add(menu)
await test_session.commit()
yield menu
if need_delete is True:
stmt = delete(SQLAMenu).where(SQLAMenu.id == menu.id)
await test_session.execute(stmt)
await test_session.commit()
else:
raise ValueError

View File

@@ -0,0 +1,65 @@
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