Eslonf commited on
Commit
b05749d
·
1 Parent(s): 4372cc6

test: Add mock test for /generate-ad endpoint

Browse files
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