from email.message import EmailMessage from pathlib import Path from sqlalchemy import create_engine from sqlalchemy.orm import Session from app.config import Settings from app.db import Base from app.attachment_extractor import ExtractedReport from app.message_processor import _store_report, _store_tls_report from app.models import MailMessage def test_duplicate_sha_detection(): engine = create_engine("sqlite:///:memory:", future=True) Base.metadata.create_all(engine) session = Session(engine) mail = MailMessage(inbox_id="tukutoi", imap_uid="1", folder="DMARC", status="skipped") session.add(mail) session.commit() payload = Path("tests/fixtures/sample_dmarc.xml").read_bytes() extracted = ExtractedReport("report.xml", payload, "0" * 64) settings = Settings.model_validate({"alerts": {"email": {"enabled": False}}}) report, duplicate = _store_report(session, settings, settings.inboxes[0] if settings.inboxes else _Inbox(), mail, extracted) session.commit() second, second_duplicate = _store_report(session, settings, settings.inboxes[0] if settings.inboxes else _Inbox(), mail, extracted) assert report is not None assert duplicate is None assert second is None assert second_duplicate == report def test_tls_report_storage_and_duplicate_sha_detection(): engine = create_engine("sqlite:///:memory:", future=True) Base.metadata.create_all(engine) session = Session(engine) mail = MailMessage(inbox_id="anamaka", imap_uid="1", folder="DMARC", status="skipped") session.add(mail) session.commit() payload = Path("tests/fixtures/sample_tlsrpt.json").read_bytes() extracted = ExtractedReport("report.json", payload, "1" * 64) settings = Settings.model_validate({"alerts": {"email": {"enabled": False}}}) report, duplicate = _store_tls_report(session, settings, _TLSInbox(), mail, extracted) session.commit() second, second_duplicate = _store_tls_report(session, settings, _TLSInbox(), mail, extracted) assert report is not None assert duplicate is None assert report.domain == "anamaka.net" assert report.policies[0].total_successful_session_count == 5 assert second is None assert second_duplicate == report class _Inbox: id = "tukutoi" domain = "tukutoi.com" class _TLSInbox: id = "anamaka" domain = "anamaka.net"