from datetime import datetime, timezone from sqlalchemy import create_engine from sqlalchemy.orm import Session from app.db import Base from app.homepage import homepage_summary, latest_summary from app.models import Alert, LLMReport, Record, Report def test_homepage_api_status_calculation(): engine = create_engine("sqlite:///:memory:", future=True) Base.metadata.create_all(engine) session = Session(engine) report = Report( inbox_id="tukutoi", raw_xml_sha256="sha-homepage", report_id="r1", org_name="google.com", domain="tukutoi.com", date_begin=datetime.now(timezone.utc), date_end=datetime.now(timezone.utc), ) session.add(report) session.flush() session.add(Record(report=report, source_ip="198.51.100.1", count=99, dmarc_pass=True, spf_aligned=True, dkim_aligned=True)) session.add(Record(report=report, source_ip="203.0.113.10", count=1, dmarc_pass=False, spf_aligned=False, dkim_aligned=False)) session.add( Alert( fingerprint="tukutoi.com:new_unknown_source:203.0.113.10", inbox_id="tukutoi", domain="tukutoi.com", severity="warning", type="new_unknown_source", title="New unknown source", summary="summary", details_json="{}", ) ) session.commit() data = homepage_summary(session) assert data["status"] == "warning" assert data["dmarc_pass_rate"] == "99.0%" assert data["warnings"] == 1 def test_overview_summary_prefers_portfolio_report(): engine = create_engine("sqlite:///:memory:", future=True) Base.metadata.create_all(engine) session = Session(engine) now = datetime.now(timezone.utc) session.add_all( [ LLMReport( domain="tukutoi.com", period_start=now, period_end=now, report_type="posture", input_json="{}", output_json="{}", plain_text="single domain", ), LLMReport( domain="__all__", period_start=now, period_end=now, report_type="posture", input_json="{}", output_json="{}", plain_text="portfolio", ), ] ) session.commit() assert latest_summary(session) == "portfolio" assert latest_summary(session, "tukutoi.com") == "single domain"