From 7a863b42762a4d477f2c31dcae17550ea0a9ef3a Mon Sep 17 00:00:00 2001 From: Open Date: Mon, 1 Jun 2026 04:33:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=AA=E6=9D=A5=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=97=B6=E9=97=B4=E6=8E=A9=E7=9B=96=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=20(#87)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- status_model.py | 2 +- tests/test_status_model.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/status_model.py b/status_model.py index 089c9ae..6c1fa10 100644 --- a/status_model.py +++ b/status_model.py @@ -38,7 +38,7 @@ def is_status_stale( current_time = now or datetime.now() age_seconds = (current_time - updated_at).total_seconds() - return age_seconds > stale_after_seconds + return age_seconds < 0 or age_seconds > stale_after_seconds def default_status() -> Dict[str, Any]: diff --git a/tests/test_status_model.py b/tests/test_status_model.py index c08ea47..a72feb0 100644 --- a/tests/test_status_model.py +++ b/tests/test_status_model.py @@ -55,6 +55,14 @@ def test_is_status_stale_uses_supplied_threshold(self): self.assertTrue(status_model.is_status_stale(status, 60)) self.assertFalse(status_model.is_status_stale(status, 300)) + def test_is_status_stale_treats_future_time_as_untrusted(self): + now = datetime(2026, 5, 29, 10, 0, 0) + future_status = { + "updated_at": (now + timedelta(minutes=5)).strftime("%Y-%m-%d %H:%M:%S") + } + + self.assertTrue(status_model.is_status_stale(future_status, 900, now=now)) + if __name__ == "__main__": unittest.main()