[+] add lint pipeline for ruff isort and black checks [+] add types pipeline for mypy check [+] add tests pipeline for pytest check with coverage less 70% blocker QG [+] add some tests fo QG pass
42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
from contextlib import asynccontextmanager
|
||
from unittest.mock import patch
|
||
|
||
import pytest
|
||
from fastapi import FastAPI
|
||
|
||
# Предполагаем, что тестируемый модуль называется `myapp`
|
||
# Импортируем из него нужные объекты
|
||
from app.main import app_factory, lifespan, main
|
||
|
||
|
||
@pytest.mark.asyncio
|
||
async def test_lifespan():
|
||
"""Проверяет, что lifespan является корректным асинхронным контекстным менеджером."""
|
||
app = FastAPI()
|
||
# Проверяем, что lifespan - это asynccontextmanager
|
||
assert isinstance(lifespan, asynccontextmanager(lifespan).__class__)
|
||
|
||
# Проверяем, что контекстный менеджер работает (ничего не ломается)
|
||
async with lifespan(app):
|
||
pass # Просто убеждаемся, что yield отрабатывает
|
||
|
||
|
||
def test_app_factory():
|
||
"""Проверяет, что app_factory создаёт правильное приложение FastAPI с переданным lifespan."""
|
||
app = app_factory()
|
||
assert isinstance(app, FastAPI)
|
||
# Проверяем, что lifespan приложения установлен на функцию lifespan
|
||
assert app.router.lifespan_context == lifespan
|
||
|
||
|
||
@patch("app.main.uvicorn.run")
|
||
def test_main(mock_uvicorn_run):
|
||
"""Проверяет, что main вызывает uvicorn.run с правильными параметрами."""
|
||
main()
|
||
mock_uvicorn_run.assert_called_once_with(
|
||
app_factory,
|
||
factory=True,
|
||
host="0.0.0.0",
|
||
port=8000, # Предполагаемый порт (в коде обрезано, но обычно 8000)
|
||
)
|