Add new file

This commit is contained in:
Markov Andrey
2026-06-30 09:23:13 +00:00
parent f380e9046b
commit b71a3e4468

View File

@@ -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 == []