Files
geointel/backend/tests/test_sprint155_detection_operator_profiles.py
T
Jens faeb58ef6d
GeoIntel release gates / Compile, test, contracts and builds (push) Successful in 1m49s
GeoIntel release gates / Python and npm vulnerability policy (push) Successful in 21s
GeoIntel release gates / Production AI image, SBOM and container scan (push) Successful in 5m39s
GeoIntel release gates / Deploy exact gated revision to Unraid (push) Failing after 58m43s
Initial public release
2026-08-31 21:56:53 +02:00

65 lines
3.0 KiB
Python

from pathlib import Path
from tests.frontend_contract import read_feature
ROOT = Path(__file__).resolve().parents[2]
def test_detection_operator_profiles_define_explicit_historical_yolo_controls_without_promotion_claim() -> None:
profiles = ROOT / "frontend" / "src" / "components" / "detection" / "detectionProfiles.ts"
source = profiles.read_text(encoding="utf-8")
assert "DETECTION_OPERATOR_PROFILES" in source
assert "geointel-building-yolov8s-smallbld-minpx3-img640-ft30-pt" in source
assert "geointel-building-yolov8s-aoi1024expandedminpx4vis035e50-pt" in source
assert "geointel-building-yolov8s-aoi1024bg512r3e50-pt" in source
assert "small-building-balanced-review" in source
assert "expanded-balanced-review" in source
assert "conservative-review" in source
assert "confidenceThreshold: 0.15" in source
assert "confidenceThreshold: 0.35" in source
assert "defaultApproved" not in source
assert "promotionRecommendation" not in source
assert "independentTestProven: false" in source
assert "positiveSampleCount: 7" in source
# The figures themselves are checked against the evidence record in
# tests/test_detection_profile_metrics_are_traceable.py. Pinning them as
# literals here is what kept an unsourced precision in the product.
assert "maxBackgroundDetections: 0" in source
assert "maxBackgroundDetections: 55" in source
assert "backgroundGate:" in source
assert "Slechts drie pure-achtergrondbeelden" in source
assert "ruimtelijke onafhankelijkheid niet bewezen" in source
assert "controlekandidaat en niet als grondwaarheid" in source
def test_detection_lab_surfaces_profiles_as_deliberate_operator_actions() -> None:
lab = "\n".join(
(
(ROOT / "frontend" / "src" / "components" / "detection" / "DetectionLab.tsx").read_text(encoding="utf-8"),
(ROOT / "frontend" / "src" / "components" / "detection" / "DetectionModelManagement.tsx").read_text(encoding="utf-8"),
)
)
assert "DETECTION_OPERATOR_PROFILES" in lab
assert "Historische YOLO-controleprofielen" in lab
assert "profile.displayName" in lab
assert "profile.confidenceThreshold" in lab
assert "historisch, geen releasebewijs" in lab
assert "historische F1" in lab
assert "Profiel gebruiken" in lab
assert "onApplyOperatorProfile(profile)" in lab
assert "Recommended starting threshold: 0.25" not in lab
def test_detection_workflow_applies_profiles_without_selecting_the_first_arbitrary_asset() -> None:
hook = (ROOT / "frontend" / "src" / "hooks" / "useDetectionWorkflow.ts").read_text(encoding="utf-8")
app = read_feature("shell")
assert "applyDetectionOperatorProfile" in hook
assert "setSelectedDetectionModelId('yolo-configured')" in hook
assert "setSelectedModelAssetId(profile.modelAssetId)" in hook
assert "setDetectionConfidenceThreshold(profile.confidenceThreshold)" in hook
assert "setSelectedModelAssetId(assetResponse.items[0]" not in hook
assert "onApplyOperatorProfile={applyDetectionOperatorProfile}" in app