fix(triggers): coerce null ms fields when loading local triggers

Explicit JSON null for runAtMs/createdAtMs raised TypeError and could
quarantine triggers.json. Treat null/blank like a missing key (0).
This commit is contained in:
santhreal
2026-07-19 15:46:00 +08:00
committed by chengyongru
parent cf00f537bd
commit cf96c4d5e9
2 changed files with 38 additions and 5 deletions
+26
View File
@@ -490,3 +490,29 @@ async def test_local_trigger_queue_recovers_processing_delivery_on_start(
assert submitted[0].content == "Review PR #4591"
assert submitted[0].metadata["_local_trigger"]["trigger_id"] == trigger.id
assert restarted.claim_deliveries() == []
def test_local_trigger_from_dict_accepts_null_run_at_ms() -> None:
from nanobot.triggers.local_types import LocalTrigger, TriggerDelivery
trigger = LocalTrigger.from_dict(
{
"id": "t1",
"name": "n",
"enabled": True,
"channel": "websocket",
"chatId": "c1",
"sessionKey": "websocket:c1",
"runHistory": [{"runAtMs": None, "status": "ok"}],
"createdAtMs": None,
"updatedAtMs": None,
}
)
assert trigger.run_history[0].run_at_ms == 0
assert trigger.created_at_ms == 0
assert trigger.updated_at_ms == 0
delivery = TriggerDelivery.from_dict(
{"id": "d1", "triggerId": "t1", "content": "hi", "createdAtMs": None}
)
assert delivery.created_at_ms == 0