minions-ai-agents/tests/test_feedback_parser.py

170 lines
5.3 KiB
Python

"""
Tests for Flywheel Module - Feedback Parser.
Tests email feedback parsing logic.
"""
import pytest
from src.flywheel.feedback_parser import (
FeedbackParser,
FeedbackResult,
FeedbackType,
get_feedback_parser
)
class TestFeedbackParser:
"""Tests for FeedbackParser class."""
@pytest.fixture
def parser(self):
"""Create feedback parser."""
return FeedbackParser()
def test_parse_resolved_portuguese(self, parser):
"""Test resolved detection in Portuguese."""
result = parser.parse(
ticket_id="TKT-001",
email_content="Obrigado pelo suporte! O problema foi resolvido.",
subject="Re: Chamado TKT-001"
)
assert result.feedback_type == FeedbackType.RESOLVED
assert result.sentiment == "positive"
def test_parse_resolved_english(self, parser):
"""Test resolved detection in English."""
result = parser.parse(
ticket_id="TKT-001",
email_content="Thanks, the issue is now fixed and working perfectly!",
subject="Re: Ticket TKT-001"
)
assert result.feedback_type == FeedbackType.RESOLVED
def test_parse_resolved_emoji(self, parser):
"""Test resolved detection with emoji."""
result = parser.parse(
ticket_id="TKT-001",
email_content="Funcionou! 👍✅",
subject="Re: TKT-001"
)
assert result.feedback_type == FeedbackType.RESOLVED
def test_parse_reopened(self, parser):
"""Test reopened detection."""
result = parser.parse(
ticket_id="TKT-001",
email_content="O problema ainda persiste. Não foi resolvido.",
subject="Re: TKT-001"
)
assert result.feedback_type == FeedbackType.REOPENED
assert result.sentiment == "negative"
def test_parse_reopened_english(self, parser):
"""Test reopened detection in English."""
result = parser.parse(
ticket_id="TKT-001",
email_content="The problem is still happening. Not fixed.",
subject="Re: TKT-001"
)
assert result.feedback_type == FeedbackType.REOPENED
def test_parse_escalate(self, parser):
"""Test escalation detection."""
result = parser.parse(
ticket_id="TKT-001",
email_content="URGENTE! Sistema crítico parou, preciso falar com o gerente!",
subject="URGENTE Re: TKT-001"
)
assert result.feedback_type == FeedbackType.ESCALATE
def test_parse_clarification(self, parser):
"""Test clarification request detection."""
result = parser.parse(
ticket_id="TKT-001",
email_content="Como faço para aplicar essa correção? Pode explicar melhor?",
subject="Re: TKT-001"
)
assert result.feedback_type == FeedbackType.CLARIFICATION
def test_extract_satisfaction_score(self, parser):
"""Test satisfaction score extraction."""
result = parser.parse(
ticket_id="TKT-001",
email_content="Resolvido! Nota 5/5 para o atendimento.",
subject="Re: TKT-001"
)
assert result.satisfaction_score == 5
def test_extract_satisfaction_thumbs(self, parser):
"""Test satisfaction from thumbs emoji."""
result = parser.parse(
ticket_id="TKT-001",
email_content="👍👍👍 Excelente suporte!",
subject="Re: TKT-001"
)
assert result.satisfaction_score == 5
def test_follow_up_detection(self, parser):
"""Test follow-up request detection."""
result = parser.parse(
ticket_id="TKT-001",
email_content="Ok, me ligar amanhã para acompanhar.",
subject="Re: TKT-001"
)
assert result.follow_up_requested is True
def test_unknown_feedback(self, parser):
"""Test unknown feedback type."""
result = parser.parse(
ticket_id="TKT-001",
email_content="xyz", # Genuinely unrecognizable
subject="Re: TKT-001"
)
# Short gibberish should be unknown
assert result.feedback_type == FeedbackType.UNKNOWN
def test_suggested_action_resolved(self, parser):
"""Test suggested action for resolved."""
result = parser.parse(
ticket_id="TKT-001",
email_content="Problema resolvido, obrigado!",
subject="Re: TKT-001"
)
assert "Fechar ticket" in result.suggested_action
def test_suggested_action_reopened(self, parser):
"""Test suggested action for reopened."""
result = parser.parse(
ticket_id="TKT-001",
email_content="Ainda não funciona, problema voltou.",
subject="Re: TKT-001"
)
assert "Reabrir" in result.suggested_action
class TestFeedbackParserSingleton:
"""Tests for singleton."""
def test_singleton(self):
"""Test singleton returns same instance."""
import src.flywheel.feedback_parser as module
module._parser = None
p1 = get_feedback_parser()
p2 = get_feedback_parser()
assert p1 is p2