63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
# -*- 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 == [] |