Spaces:
Running
Running
test: Add mock test for /generate-ad endpoint
Browse files- requirments.txt +4 -1
- tests/assets/test_image.png +0 -0
- tests/test_main.py +34 -1
requirments.txt
CHANGED
|
@@ -7,5 +7,8 @@ torch --index-url https://download.pytorch.org/whl/cpu
|
|
| 7 |
https://github.com/sergey21000/llama-cpp-python-wheels/releases/download/v0.3.16-cpu/llama_cpp_python-0.3.16-cp312-cp312-linux_x86_64.whl
|
| 8 |
huggingface-hub
|
| 9 |
Pillow
|
|
|
|
|
|
|
| 10 |
pytest
|
| 11 |
-
httpx
|
|
|
|
|
|
| 7 |
https://github.com/sergey21000/llama-cpp-python-wheels/releases/download/v0.3.16-cpu/llama_cpp_python-0.3.16-cp312-cp312-linux_x86_64.whl
|
| 8 |
huggingface-hub
|
| 9 |
Pillow
|
| 10 |
+
|
| 11 |
+
# Тестирование
|
| 12 |
pytest
|
| 13 |
+
httpx
|
| 14 |
+
pytest-mock
|
tests/assets/test_image.png
ADDED
|
tests/test_main.py
CHANGED
|
@@ -7,6 +7,7 @@ from app.main import app
|
|
| 7 |
# Создаем "виртуального клиента", который будет отправлять запросы к приложению.
|
| 8 |
client = TestClient(app)
|
| 9 |
|
|
|
|
| 10 |
def test_read_main_page():
|
| 11 |
"""
|
| 12 |
Тест проверяет, что главная страница ("/") успешно загружается.
|
|
@@ -20,4 +21,36 @@ def test_read_main_page():
|
|
| 20 |
assert response.status_code == 200
|
| 21 |
|
| 22 |
# 3. Проверка содержимого:
|
| 23 |
-
assert "Генератор объявлений" in response.text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
# Создаем "виртуального клиента", который будет отправлять запросы к приложению.
|
| 8 |
client = TestClient(app)
|
| 9 |
|
| 10 |
+
# --- Тест-кейс №1 ---
|
| 11 |
def test_read_main_page():
|
| 12 |
"""
|
| 13 |
Тест проверяет, что главная страница ("/") успешно загружается.
|
|
|
|
| 21 |
assert response.status_code == 200
|
| 22 |
|
| 23 |
# 3. Проверка содержимого:
|
| 24 |
+
assert "Генератор объявлений" in response.text
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
# --- Тест-кейс №2 ---
|
| 28 |
+
def test_submit_image_successfully(mocker):
|
| 29 |
+
"""
|
| 30 |
+
Тест проверяет успешную отправку изображения и постановку задачи в очередь.
|
| 31 |
+
'mocker' - это специальный аргумент от pytest-mock для создания "моков".
|
| 32 |
+
"""
|
| 33 |
+
# 1. Подготовка "мока":
|
| 34 |
+
# Мы "подменяем" настоящую, тяжелую ML-функцию на заглушку.
|
| 35 |
+
mocker.patch(
|
| 36 |
+
'app.main.generate_ad_from_image',
|
| 37 |
+
return_value={"status": "mocked_ok"}
|
| 38 |
+
)
|
| 39 |
+
|
| 40 |
+
# 2. Действие:
|
| 41 |
+
# Имитируем отправку файла, как это делает браузер.
|
| 42 |
+
with open("tests/assets/test_image.png", "rb") as f:
|
| 43 |
+
response = client.post(
|
| 44 |
+
"/generate-ad",
|
| 45 |
+
data={"style": "brief"},
|
| 46 |
+
files={"image": ("test_image.png", f, "image/png")}
|
| 47 |
+
)
|
| 48 |
+
|
| 49 |
+
# 3. Проверки (Asserts):
|
| 50 |
+
# Утверждаем, что сервер ответил кодом 202 (Accepted),
|
| 51 |
+
# что означает "задача принята в обработку".
|
| 52 |
+
assert response.status_code == 202
|
| 53 |
+
|
| 54 |
+
# Утверждаем, что в JSON-ответе есть ключ "task_id".
|
| 55 |
+
data = response.json()
|
| 56 |
+
assert "task_id" in data
|