client fixture and Menu&Submenu base test

develop
Сергей Ванюшкин 2024-01-27 12:48:20 +00:00
parent b474e21f0f
commit d6f1347fab
1 changed files with 104 additions and 69 deletions

View File

@ -7,124 +7,159 @@ url = "http://localhost:8000/api/v1/menus"
class TestCrud: class TestCrud:
class Menu: class Menu:
@staticmethod @staticmethod
async def read_all(app): async def read_all(ac):
"""чтение всех меню""" """чтение всех меню"""
async with AsyncClient(app=app, base_url=url) as ac: response = await ac.get("/")
response = await ac.get("/") return response.status_code, response.json()
return response.status_code, response.json()
@staticmethod @staticmethod
async def get(app, data): async def get(ac, data):
"""Получение меню по id""" """Получение меню по id"""
async with AsyncClient(app=app, base_url=url) as ac: response = await ac.get(f"/{data.get('id')}")
response = await ac.get(f"/{data.get('id')}") return response.status_code, response.json()
return response.status_code, response.json()
@staticmethod
async def write(app, data):
"""создания меню"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.post("/", json=data)
return response.status_code, response.json()
@staticmethod
async def update(app, data):
"""Обновление меню по id"""
async with AsyncClient(app=app, base_url=url) as ac:
response = await ac.patch(f"/{data.get('id')}", json=data)
return response.status_code, response.json()
@staticmethod @staticmethod
async def delete(app, data): async def write(ac, data):
"""создания меню"""
response = await ac.post("/", json=data)
return response.status_code, response.json()
@staticmethod
async def update(ac, data):
"""Обновление меню по id"""
response = await ac.patch(f"/{data.get('id')}", json=data)
return response.status_code, response.json()
@staticmethod
async def delete(ac, data):
"""Удаление меню по id""" """Удаление меню по id"""
async with AsyncClient(app=app, base_url=url) as ac: response = await ac.delete(f"/{data.get('id')}")
response = await ac.delete(f"/{data.get('id')}")
class Submenu: class Submenu:
@staticmethod @staticmethod
async def read_all(app, menu): async def read_all(ac, menu):
"""чтение всех меню""" """чтение всех меню"""
async with AsyncClient(app=app, base_url=url) as ac: response = await ac.get(f"/{menu.get('id')}/submenus/")
response = await ac.get(f"/{menu.get('id')}/submenus/") return response.status_code, response.json()
print(response)
return response.status_code, response.json()
@staticmethod @staticmethod
async def get(app, menu, submenu): async def get(ac, menu, submenu):
"""Получение меню по id""" """Получение меню по id"""
async with AsyncClient(app=app, base_url=url) as ac: response = await ac.get(
response = await ac.get( f"/{menu.get('id')}/submenus/{submenu.get('id')}",
f"/{menu.get('id')}/submenus/{submenu.get('id')}", )
) return response.status_code, response.json()
return response.status_code, response.json()
@staticmethod @staticmethod
async def write(app, menu, submenu): async def write(ac, menu, submenu):
"""создания меню""" """создания меню"""
async with AsyncClient(app=app, base_url=url) as ac: response = await ac.post(
response = await ac.post( f"/{menu.get('id')}/submenus/",
f"/{menu.get('id')}/submenus/", json=submenu, json=submenu,
) )
return response.status_code, response.json() return response.status_code, response.json()
@staticmethod @staticmethod
async def update(app, menu, submenu): async def update(ac, menu, submenu):
"""Обновление меню по id""" """Обновление меню по id"""
async with AsyncClient(app=app, base_url=url) as ac: response = await ac.patch(
response = await ac.patch( f"/{menu.get('id')}/submenus/{submenu.get('id')}",
f"/{menu.get('id')}/submenus/{submenu.get('id')}", json=submenu,
json=submenu, )
) return response.status_code, response.json()
return response.status_code, response.json()
@staticmethod @staticmethod
async def delete(app, menu, submenu): async def delete(ac, menu, submenu):
"""Удаление меню по id""" """Удаление меню по id"""
async with AsyncClient(app=app, base_url=url) as ac: response = await ac.delete(
response = await ac.delete(f"/{menu.get('id')}/submenus/{submenu.get('id')}") f"/{menu.get('id')}/submenus/{submenu.get('id')}"
)
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_menu_crud(self, app): async def test_menu_crud(self, client):
"""Тестирование функций меню""" """Тестирование функций меню"""
code, rspn = await self.Menu.read_all(app) code, rspn = await self.Menu.read_all(client)
assert code == 200 assert code == 200
data = {"title": "Menu", "description": None} data = {"title": "Menu", "description": None}
code, rspn = await self.Menu.write(app, data) code, rspn = await self.Menu.write(client, data)
assert code == 201 assert code == 201
assert rspn["title"] == "Menu" assert rspn["title"] == "Menu"
assert rspn["description"] is None assert rspn["description"] is None
code, menu = await self.Menu.get(app, {"id": rspn.get("id")}) code, menu = await self.Menu.get(client, {"id": rspn.get("id")})
assert code == 200 assert code == 200
assert menu["title"] == rspn["title"] assert menu["title"] == rspn["title"]
upd_data = { upd_data = {
"id": rspn.get("id"), "title": "upd Menu", "description": "", "id": rspn.get("id"),
"title": "upd Menu",
"description": "",
} }
code, upd_rspn = await self.Menu.update(app, upd_data) code, upd_rspn = await self.Menu.update(client, upd_data)
assert code == 200 assert code == 200
assert upd_rspn["title"] == "upd Menu" assert upd_rspn["title"] == "upd Menu"
code = await self.Menu.delete(app, rspn) code = await self.Menu.delete(client, rspn)
code, menu = await self.Menu.get(app, {"id": rspn.get("id")}) code, menu = await self.Menu.get(client, {"id": rspn.get("id")})
assert code == 404 assert code == 404
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_submenu(self, app): async def test_submenu(self, client):
# Создаем меню и проверяем ответ
menu = {"title": "Menu", "description": "main menu"} menu = {"title": "Menu", "description": "main menu"}
code, rspn = await self.Menu.write(app, menu) code, rspn = await self.Menu.write(client, menu)
assert code == 201 assert code == 201
menu.update(rspn) menu.update(rspn)
print(menu)
code, rspn = await self.Submenu.read_all(app, menu) # Проверяем наличие подменю
code, rspn = await self.Submenu.read_all(client, menu)
assert code == 200 assert code == 200
assert rspn == [] assert rspn == []
# Создаем и проверяем подменю
submenu = {
"title": "Submenu",
"description": "submenu",
"parent_menu": menu["id"],
}
code, rspn = await self.Submenu.write(client, menu, submenu)
assert code == 201
submenu.update(rspn)
class TestСontinuity: # Проверяем меню на наличие подменю
@pytest.mark.asyncio code, rspn = await self.Menu.get(client, menu)
async def test_postman_continuity(self, app): assert code == 200
async with AsyncClient(app=app, base_url=url) as ac: assert rspn["submenus_count"] == 1
pass
# Обновляем подменю и проверяем
submenu["title"] = "updated_submenu"
code, rspn = await self.Submenu.update(client, menu, submenu)
assert code == 200
assert submenu["title"] == rspn["title"]
submenu.update(rspn)
# Удаляем подменю
code = await self.Submenu.delete(client, menu, submenu)
assert code is None
# Проверяем меню
code, rspn = await self.Menu.get(client, menu)
assert code == 200
assert rspn["submenus_count"] == 0
# Проверяем удаленное подменю
code, rspn = await self.Submenu.get(client, menu, submenu)
assert code == 404
# удаляем сопутствующее
await self.Menu.delete(client, menu)
#
# class TestСontinuity:
# @pytest.mark.asyncio
# async def test_postman_continuity(self, app):
# async with AsyncClient(app=app, base_url=url) as ac:
# pass