Редактировать test_extract_metrics.py
This commit is contained in:
63
tests/test_extract_metrics.py
Normal file
63
tests/test_extract_metrics.py
Normal 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 == []
|
||||
Reference in New Issue
Block a user