updt
This commit is contained in:
0
tests/e2e_tests/__init__.py
Normal file
0
tests/e2e_tests/__init__.py
Normal file
0
tests/e2e_tests/api/__init__.py
Normal file
0
tests/e2e_tests/api/__init__.py
Normal file
0
tests/e2e_tests/api/menu/__init__.py
Normal file
0
tests/e2e_tests/api/menu/__init__.py
Normal file
74
tests/e2e_tests/api/menu/conftest.py
Normal file
74
tests/e2e_tests/api/menu/conftest.py
Normal 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
|
65
tests/e2e_tests/api/menu/test_menu.py
Normal file
65
tests/e2e_tests/api/menu/test_menu.py
Normal 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
|
13
tests/e2e_tests/conftest.py
Normal file
13
tests/e2e_tests/conftest.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from httpx import ASGITransport, AsyncClient
|
||||
from pytest import fixture
|
||||
|
||||
|
||||
@fixture
|
||||
async def client(app):
|
||||
transport = ASGITransport(app=app)
|
||||
|
||||
async with AsyncClient(
|
||||
transport=transport,
|
||||
base_url="http://127.0.0.1:8000/api/v1/",
|
||||
) as async_client:
|
||||
yield async_client
|
Reference in New Issue
Block a user