feat(Q5): package delivery state machine with sunset-aware reminders

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Aaron D. Lee
2026-04-03 18:46:59 -04:00
parent 8bf7900324
commit 31757f410a
2 changed files with 138 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
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