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