""" Tests for domain-agent correctness fixes. FleetAgent: hub availability accounting must stay within [0, total] across maintenance / release / double-release (it used to drift because maintenance didn't decrement and release incremented unconditionally). OrderAgent: validation/categorization must not crash on a null address block or a numeric pincode (valid JSON the backend may send). Run: python -m unittest discover -s tests """ import unittest from core.types import AgentTask from core.message_bus import message_bus from agents.fleet_agent import FleetAgent from agents.order_agent import OrderAgent def _task(task_type, **data): return AgentTask(task_id="t", agent_type="x", task_type=task_type, data=data) class TestFleetCapacity(unittest.IsolatedAsyncioTestCase): async def asyncTearDown(self): message_bus.unregister_agent("FLEET_AGENT") async def test_maintenance_release_stay_in_bounds(self): fleet = FleetAgent() hub = "DL-HUB-01" total = fleet._hub_capacity[hub]["total"] start = fleet._hub_capacity[hub]["available"] await fleet._schedule_maintenance(_task("schedule_maintenance", vehicle_id="DL-V-001")) self.assertEqual(fleet._hub_capacity[hub]["available"], start - 1) # decremented await fleet._release_vehicle(_task("release_vehicle", vehicle_id="DL-V-001")) self.assertEqual(fleet._hub_capacity[hub]["available"], start) # restored # Releasing an already-available vehicle must not push above total. await fleet._release_vehicle(_task("release_vehicle", vehicle_id="DL-V-001")) self.assertEqual(fleet._hub_capacity[hub]["available"], start) self.assertLessEqual(fleet._hub_capacity[hub]["available"], total) class TestOrderRobustness(unittest.IsolatedAsyncioTestCase): async def asyncTearDown(self): message_bus.unregister_agent("ORDER_AGENT") def test_addr_pincode_tolerates_null_and_numeric(self): self.assertEqual(OrderAgent._addr_pincode({"pickup_address": None}, "pickup_address"), "") self.assertEqual(OrderAgent._addr_pincode({"pickup_address": {"pincode": 400001}}, "pickup_address"), "400001") self.assertEqual(OrderAgent._addr_pincode({}, "pickup_address"), "") def test_valid_pincode_handles_int_and_none(self): agent = OrderAgent() self.assertTrue(agent._is_valid_pincode(400001)) # numeric, 6 digits self.assertFalse(agent._is_valid_pincode(None)) self.assertFalse(agent._is_valid_pincode("12")) def test_categorize_does_not_crash_on_bad_addresses(self): agent = OrderAgent() out = agent._categorize_order_data({ "pickup_address": None, # explicit null "delivery_address": {"pincode": 400001}, # numeric pincode "items": [], }) self.assertIn("zone_type", out) if __name__ == "__main__": unittest.main()