import unittest from app import GatewayApp from services.api_client import ApiClient from services.token_store import InMemoryTokenStore from tools.query_order import QueryOrderTool class DummyTransport: def __init__(self): self.calls = [] def post_json(self, url, payload, headers, timeout): self.calls.append( { 'url': url, 'payload': payload, 'headers': headers, 'timeout': timeout, } ) return { 'code': 'MCP_0000', 'msg': 'success', 'data': { 'summary': 'ok', 'records': [], 'tips': [], }, 'meta': { 'request_id': headers['X-Request-Id'], }, } class GatewayQueryOrderTest(unittest.TestCase): def test_gateway_lists_query_order_tool(self): app = GatewayApp() tools = app.list_tools() by_name = {tool['name']: tool for tool in tools} self.assertIn('query_order', by_name) self.assertIn('keyword', by_name['query_order']['input_schema']['required']) def test_api_client_adds_mcp_headers_when_calling_tool(self): transport = DummyTransport() store = InMemoryTokenStore(refresh_skew_seconds=60) store.save('MT_demo', '2099-01-01T00:00:00') client = ApiClient( base_url='http://tools.example.test', token_store=store, transport=transport, timeout=8, ) response = client.call_tool( tool_code='query_order', route_path='/admin/mcp/tools/queryOrder', payload={'keyword': 'SO20260706001', 'page': 1, 'limit': 20}, request_id='rq_demo', ) self.assertEqual('MCP_0000', response['code']) self.assertEqual(1, len(transport.calls)) self.assertEqual('Bearer MT_demo', transport.calls[0]['headers']['Authorization']) self.assertEqual('query_order', transport.calls[0]['headers']['X-MCP-Tool-Code']) self.assertEqual('rq_demo', transport.calls[0]['headers']['X-Request-Id']) self.assertEqual('http://tools.example.test/admin/mcp/tools/queryOrder', transport.calls[0]['url']) def test_query_order_tool_normalizes_input_before_forwarding(self): transport = DummyTransport() store = InMemoryTokenStore(refresh_skew_seconds=60) store.save('MT_demo', '2099-01-01T00:00:00') client = ApiClient( base_url='http://tools.example.test', token_store=store, transport=transport, timeout=8, ) tool = QueryOrderTool(api_client=client) tool.call(keyword=' SO20260706001 ', page=2, limit=15, request_id='rq_tool') self.assertEqual( { 'keyword': 'SO20260706001', 'page': 2, 'limit': 15, }, transport.calls[0]['payload'], ) if __name__ == '__main__': unittest.main()