63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
"""Tests for local image crisis screening slice under epic #130."""
|
|
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from image_screening import ImageScreeningResult, screen_image_signals
|
|
|
|
|
|
class TestImageScreeningResult(unittest.TestCase):
|
|
def test_to_dict_preserves_core_fields(self):
|
|
result = ImageScreeningResult(
|
|
ocr_text="help me",
|
|
labels=["blood"],
|
|
visual_flags=["dark_scene"],
|
|
distress_score=0.8,
|
|
requires_human_review=True,
|
|
signals_detected=["direct_self_harm_label:blood"],
|
|
)
|
|
|
|
data = result.to_dict()
|
|
self.assertEqual(data["ocr_text"], "help me")
|
|
self.assertEqual(data["labels"], ["blood"])
|
|
self.assertTrue(data["requires_human_review"])
|
|
|
|
|
|
class TestScreenImageSignals(unittest.TestCase):
|
|
def test_direct_self_harm_labels_trigger_high_risk(self):
|
|
result = screen_image_signals(
|
|
labels=["razor blade", "blood droplets"],
|
|
manual_notes="photo of fresh cuts on forearm",
|
|
)
|
|
|
|
self.assertGreaterEqual(result.distress_score, 0.8)
|
|
self.assertTrue(result.requires_human_review)
|
|
self.assertTrue(any("self_harm" in signal for signal in result.signals_detected))
|
|
|
|
def test_ocr_text_uses_existing_crisis_detector(self):
|
|
result = screen_image_signals(
|
|
ocr_text="I want to kill myself tonight",
|
|
labels=["handwritten note"],
|
|
)
|
|
|
|
self.assertGreaterEqual(result.distress_score, 0.7)
|
|
self.assertTrue(result.requires_human_review)
|
|
self.assertTrue(any(signal.startswith("ocr_crisis_level:") for signal in result.signals_detected))
|
|
|
|
def test_neutral_image_stays_low_risk(self):
|
|
result = screen_image_signals(
|
|
labels=["dog", "park", "sunlight"],
|
|
manual_notes="family outing in daylight",
|
|
)
|
|
|
|
self.assertLess(result.distress_score, 0.2)
|
|
self.assertFalse(result.requires_human_review)
|
|
self.assertEqual(result.signals_detected, [])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|