80 lines
2.5 KiB
Python
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"
|