fastfood_two/tests/e2e_tests/api/menu/conftest.py

75 lines
2.4 KiB
Python

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