Files
clientflow_backend/tests/test_v4926_1_email_identity_quality.py
2026-06-09 22:55:58 +01:00

125 lines
4.0 KiB
Python

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