From a8f036f25fa2cc359ed1ee0be191de8aef4f6cbc Mon Sep 17 00:00:00 2001 From: Peter Woolery Date: Tue, 14 Apr 2026 07:02:51 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20CameraRecord=20=E2=80=94=20reject=20nega?= =?UTF-8?q?tive=20entries/exits=20via=20Pydantic=20Field(ge=3D0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- server/camera_endpoint.py | 6 +++--- server/test_camera_endpoint.py | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/server/camera_endpoint.py b/server/camera_endpoint.py index d5ebe62..8bababb 100644 --- a/server/camera_endpoint.py +++ b/server/camera_endpoint.py @@ -11,14 +11,14 @@ import sqlite3 from typing import List from fastapi import Depends -from pydantic import BaseModel +from pydantic import BaseModel, Field class CameraRecord(BaseModel): period_start: int period_end: int - entries: int - exits: int + entries: int = Field(ge=0) + exits: int = Field(ge=0) class CameraEventsRequest(BaseModel): diff --git a/server/test_camera_endpoint.py b/server/test_camera_endpoint.py index 159fbc7..3917b75 100644 --- a/server/test_camera_endpoint.py +++ b/server/test_camera_endpoint.py @@ -89,3 +89,12 @@ def test_entries_exits_stored_correctly(): assert row[0] == 42 assert row[1] == 39 assert row[2] == "retailer-123" + + +def test_negative_counts_rejected(): + """Pydantic should reject negative entries/exits.""" + from pydantic import ValidationError + from server.camera_endpoint import CameraRecord + with pytest.raises(ValidationError): + CameraRecord(period_start=1712000000, period_end=1712003600, + entries=-1, exits=0)