2026-06-14 20:47:25 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from data.crowd_db.loader import CrowdDBLoader
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_build_quality_summary_returns_expected_shape():
|
|
|
|
|
from data.crowd_db.quality_summary import build_quality_summary
|
|
|
|
|
|
|
|
|
|
summary = build_quality_summary(CrowdDBLoader(warn_low_confidence=False))
|
|
|
|
|
|
2026-06-25 09:17:03 +08:00
|
|
|
assert summary["total_provinces"] == 31
|
2026-06-14 20:47:25 +08:00
|
|
|
assert summary["by_quality_level"]
|
|
|
|
|
assert set(summary["by_quality_level"]).issuperset({"high", "usable", "skeleton"})
|
2026-06-25 09:17:03 +08:00
|
|
|
assert len(summary["provinces"]) == 31
|
2026-06-14 20:47:25 +08:00
|
|
|
first = summary["provinces"][0]
|
|
|
|
|
assert set(first).issuperset({
|
|
|
|
|
"province",
|
|
|
|
|
"confidence",
|
|
|
|
|
"quality_level",
|
|
|
|
|
"quality_label",
|
|
|
|
|
"data_year",
|
|
|
|
|
"source_type",
|
|
|
|
|
})
|
2026-06-21 11:54:16 +08:00
|
|
|
hunan = next(p for p in summary["provinces"] if p["province"] == "湖南")
|
|
|
|
|
assert hunan["quality_level"] == "high"
|
2026-06-14 20:47:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_quality_summary_cli_human_output(capsys):
|
|
|
|
|
from data.crowd_db.quality_summary import main
|
|
|
|
|
|
|
|
|
|
code = main(["--human"])
|
|
|
|
|
captured = capsys.readouterr()
|
|
|
|
|
assert code == 0
|
2026-06-25 09:17:03 +08:00
|
|
|
assert "province_count: 31" in captured.out
|
2026-06-14 20:47:25 +08:00
|
|
|
assert "quality_counts:" in captured.out
|
|
|
|
|
assert "湖南" in captured.out
|