route optimizer agent with dailygrubs ai assign
This commit is contained in:
74
tests/test_domain_agents.py
Normal file
74
tests/test_domain_agents.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""
|
||||
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()
|
||||
Reference in New Issue
Block a user