from app.email_identity_extraction_service import extract_email_identity DIETIMPORT_EMAIL = """ Boa tarde, Conseguiria enviar-me a fatura em formato digital, referente à nossa última encomenda? Obrigado. Com os melhores cumprimentos, Filipe Delgado Engenheiro Civil Responsável Departamento de Manutenção Rua Dr. Costa Sacadura N.º4 1800-176 Lisboa Telem: +351 96 873 88 56 (Chamada para Rede Móvel Nacional) Tel: +351 21 159 01 95 (Chamada para Rede Fixa Nacional) AVISO Esta mensagem (incluindo quaisquer anexos) pode conter informação confidencial para uso exclusivo do destinatário. Se não for o destinatário pretendido não deverá usar, distribuir ou copiar este e-mail. Se recebeu esta mensagem por engano por favor informe o emissor e elimine-a imediatamente. As opiniões emitidas nesta mensagem não são necessariamente as da Dietimport S.A.. Obrigado. """ def test_regex_identity_ignores_valediction_as_person_name(): data = extract_email_identity( DIETIMPORT_EMAIL, email="filipedelgado@dietimport.pt", use_llm=False, ) assert data["person_name"] == "Filipe Delgado" assert data["person_name"] != "Com os melhores cumprimentos," def test_regex_identity_keeps_company_name_not_full_disclaimer(): data = extract_email_identity( DIETIMPORT_EMAIL, email="filipedelgado@dietimport.pt", use_llm=False, ) assert data["company_mentions"] == ["Dietimport S.A"] assert all("informação confidencial" not in company for company in data["company_mentions"]) assert all(len(company) < 80 for company in data["company_mentions"]) def test_regex_identity_address_stops_before_phone_labels(): data = extract_email_identity( DIETIMPORT_EMAIL, email="filipedelgado@dietimport.pt", use_llm=False, ) assert data["address"] == "Rua Dr. Costa Sacadura N.º4 1800-176 Lisboa" assert "Telem" not in data["address"] assert "+351 96 873 88 56" in data["phones"] assert data["domain"] == "dietimport.pt" def test_identity_cleanup_removes_legal_paragraph_mentions(monkeypatch): from app.email_identity_extraction_service import merge_identity regex_data = { "person_name": "", "company_mentions": [ "dos nesta comunicação estão incorporados num ficheiro cujo responsável é a SOPAC, S.A", "obter a confirmação sobre se a SOPAC, S.A", ], "address": "", "phones": [], "websites": [], "email": "info@adp-fertilizantes.pt", "domain": "adp-fertilizantes.pt", "confidence": 0.9, "evidence": [], "method": "regex", } data = merge_identity(regex_data, None) assert data["company_mentions"] == ["SOPAC, S.A"] assert all("ficheiro" not in company for company in data["company_mentions"]) def test_identity_cleanup_removes_cjk_noise_from_person_name(): from app.email_identity_extraction_service import merge_identity regex_data = { "person_name": "Luis Roch游戏副本a", "company_mentions": [], "address": "", "phones": [], "websites": [], "email": "luis.rocha@coimpack.pt", "domain": "coimpack.pt", "confidence": 0.85, "evidence": [], "method": "regex", } data = merge_identity(regex_data, None) assert data["person_name"] == "Luis Rocha" assert data["confidence"] <= 0.45 def test_identity_cleanup_rejects_mobile_footer_as_person_name(): from app.email_identity_extraction_service import merge_identity regex_data = { "person_name": "Enviado do meu Galaxy", "company_mentions": [], "address": "", "phones": [], "websites": [], "email": "paulo.campelo@sapo.pt", "domain": "sapo.pt", "confidence": 0.7, "evidence": [], "method": "regex", } data = merge_identity(regex_data, None) assert data["person_name"] == "" assert data["confidence"] <= 0.45