From b71a3e4468e30ebb6a4246fcbd63b018f07b38b1 Mon Sep 17 00:00:00 2001 From: Markov Andrey Date: Tue, 30 Jun 2026 09:23:13 +0000 Subject: [PATCH] Add new file --- core/tests/test_extract_metrics.py | 63 ++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 core/tests/test_extract_metrics.py diff --git a/core/tests/test_extract_metrics.py b/core/tests/test_extract_metrics.py new file mode 100644 index 0000000..7534c79 --- /dev/null +++ b/core/tests/test_extract_metrics.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +""" +Тесты для модуля извлечения метрик. +Проверяем, что функция корректно парсит JSON и делает fallback. +""" + +import json +import pytest +from core.functions.extract_metrics import extract_metrics + + +@pytest.mark.asyncio +async def test_metrics_json_success(mock_giga, mock_bot_config): + """ + Тест: успешное извлечение метрик из JSON-ответа. + """ + expected_metrics = [ + {"metric_name": "OEE линии", "value": "85,2", "unit": "%", "period": "первый квартал 2025", "source_fragment": "OEE линии составил 85,2%"} + ] + mock_giga.chat.return_value = json.dumps(expected_metrics, ensure_ascii=False) + + result = await extract_metrics( + giga=mock_giga, + context="OEE линии составил 85,2% в первом квартале 2025 года.", + prompt_text="Ты — аналитик... ВЫВЕДИ ТОЛЬКО JSON.", + bot_config=mock_bot_config + ) + assert result == expected_metrics + + +@pytest.mark.asyncio +async def test_metrics_fallback(mock_giga, mock_bot_config): + """ + Тест: если JSON невалидный, выполняется fallback-парсинг строк вида 'ключ: значение'. + Контекст должен быть длиннее 20 символов, чтобы функция не вернула пустой список раньше времени. + """ + # Убеждаемся, что контекст имеет длину > 20 символов + mock_giga.chat.return_value = "OEE: 85.2%\nТакт: 120 сек" + + result = await extract_metrics( + giga=mock_giga, + context="Длинный контекст для извлечения метрик: OEE: 85.2%\nТакт: 120 сек", + prompt_text="Ты — аналитик...", + bot_config=mock_bot_config + ) + assert len(result) == 2 + assert result[0]["metric_name"] == "OEE" + assert result[0]["value"] == "85.2%" + assert result[1]["metric_name"] == "Такт" + + +@pytest.mark.asyncio +async def test_metrics_empty_context(mock_giga, mock_bot_config): + """ + Тест: при пустом контексте возвращается пустой список. + """ + result = await extract_metrics( + giga=mock_giga, + context="", + prompt_text="Ты — аналитик...", + bot_config=mock_bot_config + ) + assert result == [] \ No newline at end of file