""" 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