Files
AI_engine/tests/test_domain_agents.py

75 lines
2.9 KiB
Python

"""
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()