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:
39
tests/unit/test_package.py
Normal file
39
tests/unit/test_package.py
Normal 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
|
||||
Reference in New Issue
Block a user