import time from vigilar.detection.package import PackageTracker, PackageState def test_initial_state_is_idle(): tracker = PackageTracker(camera_id="front", latitude=45.0, longitude=-85.0) assert tracker.state == PackageState.IDLE def test_person_detected_starts_tracking(): tracker = PackageTracker(camera_id="front", latitude=45.0, longitude=-85.0) tracker.on_person_detected(time.time()) assert tracker._person_last_seen > 0 def test_person_departed_then_package_detected(): tracker = PackageTracker(camera_id="front", latitude=45.0, longitude=-85.0) now = time.time() tracker.on_person_detected(now - 60) tracker._person_last_seen = now - 35 result = tracker.check_for_package( detections=[{"class_id": 28, "bbox": [100, 200, 50, 50], "confidence": 0.7}], now=now) assert result is True assert tracker.state == PackageState.PRESENT def test_package_collected(): tracker = PackageTracker(camera_id="front", latitude=45.0, longitude=-85.0) now = time.time() tracker._state = PackageState.PRESENT tracker._package_bbox = [100, 200, 50, 50] tracker._detected_at = now - 3600 tracker.on_person_detected(now) collected = tracker.check_collected(detections=[], now=now) assert collected is True assert tracker.state == PackageState.COLLECTED def test_reminder_time_calculation(): tracker = PackageTracker(camera_id="front", latitude=45.0, longitude=-85.0) now = time.time() reminder = tracker._calculate_reminder_time(now) assert reminder >= now assert reminder <= now + 3 * 3600 + 60