Files
geointel/backend/tests/test_sprint155_detection_operator_profiles.py
T
Codex 78a5f0b0b2
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s
Close full operational audit findings
2026-07-17 14:19:02 +02:00

62 lines
2.9 KiB
Python

from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def test_detection_operator_profiles_define_explicit_yolo_candidates_and_promoted_profile() -> 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: true" in source
assert "promotionRecommendation: 'promote_candidate'" in source
assert "positiveSampleCount: 7" in source
assert "precision: 0.6140895327792112" in source
assert "recall: 0.6062221049337548" in source
assert "f1: 0.6068607646002744" in source
assert "f1: 0.5432865390636915" in source
assert "maxBackgroundDetections: 0" in source
assert "lege-achtergrondtest is geslaagd" in source
assert "Postel blijft met 47,5% F1" 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 "Gevalideerde YOLO-profielen" in lab
assert "profile.displayName" in lab
assert "profile.confidenceThreshold" in lab
assert "kandidaat, extra controle vereist" in lab
assert "standaardprofiel" 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 = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
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