Files
DMARC-Sentinel/tests/test_homepage.py
T
2026-05-16 12:05:36 -03:00

80 lines
2.5 KiB
Python

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"