Files
Rpa_Skills/tests/test_bands.py
T

53 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Confidence bands: thresholds, the worst-word rule and the blank-mandatory flag (spec: Banding)."""
import importlib.util
import re
from pathlib import Path
BANDS = Path(__file__).resolve().parents[1] / "rpa-dashboard-ai" / "templates" / "web" / "bands.py"
spec = importlib.util.spec_from_file_location("bands", BANDS)
bands = importlib.util.module_from_spec(spec)
spec.loader.exec_module(bands)
def test_thresholds():
assert bands.band_of(1.0) == "green"
assert bands.band_of(0.95) == "green"
assert bands.band_of(0.9499) == "amber"
assert bands.band_of(0.90) == "amber"
assert bands.band_of(0.8999) == "red"
assert bands.band_of(0.0) == "red"
def test_field_takes_its_worst_word():
assert bands.field_band([0.99, 0.97, 0.98], "ACME Office Supply") == "green"
assert bands.field_band([0.99, 0.93, 0.98], "ACME Office Supply") == "amber"
assert bands.field_band([0.99, 0.97, 0.62], "ACME Office Supply") == "red"
def test_blank_mandatory_field_is_always_flagged():
assert bands.field_band([1.0], "", mandatory=True) == "blank"
assert bands.field_band([], " ", mandatory=True) == "blank"
assert bands.field_band(None, None, mandatory=True) == "blank"
assert bands.needs_review("blank")
# An optional blank is graded like any other field.
assert bands.field_band([1.0], "", mandatory=False) == "green"
def test_no_scores_means_unscored():
assert bands.field_band([], "INV-1001") == "unscored"
def test_only_green_skips_review():
assert not bands.needs_review("green")
assert all(bands.needs_review(b) for b in ["amber", "red", "blank", "unscored"])
def test_page_legends_use_the_bands_py_cut_points():
"""The legend labels are hard-coded in the pages; they must say what bands.py decides."""
green, floor = bands.GREEN_THRESHOLD, bands.CONFIDENCE_THRESHOLD
for page in [BANDS.parents[1] / "web" / "src" / "ai.ts", BANDS.parents[1] / "desktop" / "ai_sections.html"]:
m = re.search(r"Clean ≥([\d.]+).*?Check ([\d.]+)–([\d.]+).*?Review <([\d.]+)",
page.read_text(encoding="utf-8"), re.S)
assert m, f"{page.name}: band legend labels not found"
assert tuple(map(float, m.groups())) == (green, floor, green, floor), page.name