test_gateway_query_order.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import unittest
  2. from app import GatewayApp
  3. from services.api_client import ApiClient
  4. from services.token_store import InMemoryTokenStore
  5. from tools.query_order import QueryOrderTool
  6. class DummyTransport:
  7. def __init__(self):
  8. self.calls = []
  9. def post_json(self, url, payload, headers, timeout):
  10. self.calls.append(
  11. {
  12. 'url': url,
  13. 'payload': payload,
  14. 'headers': headers,
  15. 'timeout': timeout,
  16. }
  17. )
  18. return {
  19. 'code': 'MCP_0000',
  20. 'msg': 'success',
  21. 'data': {
  22. 'summary': 'ok',
  23. 'records': [],
  24. 'tips': [],
  25. },
  26. 'meta': {
  27. 'request_id': headers['X-Request-Id'],
  28. },
  29. }
  30. class GatewayQueryOrderTest(unittest.TestCase):
  31. def test_gateway_lists_query_order_tool(self):
  32. app = GatewayApp()
  33. tools = app.list_tools()
  34. by_name = {tool['name']: tool for tool in tools}
  35. self.assertIn('query_order', by_name)
  36. self.assertIn('keyword', by_name['query_order']['input_schema']['required'])
  37. def test_api_client_adds_mcp_headers_when_calling_tool(self):
  38. transport = DummyTransport()
  39. store = InMemoryTokenStore(refresh_skew_seconds=60)
  40. store.save('MT_demo', '2099-01-01T00:00:00')
  41. client = ApiClient(
  42. base_url='http://tools.example.test',
  43. token_store=store,
  44. transport=transport,
  45. timeout=8,
  46. )
  47. response = client.call_tool(
  48. tool_code='query_order',
  49. route_path='/admin/mcp/tools/queryOrder',
  50. payload={'keyword': 'SO20260706001', 'page': 1, 'limit': 20},
  51. request_id='rq_demo',
  52. )
  53. self.assertEqual('MCP_0000', response['code'])
  54. self.assertEqual(1, len(transport.calls))
  55. self.assertEqual('Bearer MT_demo', transport.calls[0]['headers']['Authorization'])
  56. self.assertEqual('query_order', transport.calls[0]['headers']['X-MCP-Tool-Code'])
  57. self.assertEqual('rq_demo', transport.calls[0]['headers']['X-Request-Id'])
  58. self.assertEqual('http://tools.example.test/admin/mcp/tools/queryOrder', transport.calls[0]['url'])
  59. def test_query_order_tool_normalizes_input_before_forwarding(self):
  60. transport = DummyTransport()
  61. store = InMemoryTokenStore(refresh_skew_seconds=60)
  62. store.save('MT_demo', '2099-01-01T00:00:00')
  63. client = ApiClient(
  64. base_url='http://tools.example.test',
  65. token_store=store,
  66. transport=transport,
  67. timeout=8,
  68. )
  69. tool = QueryOrderTool(api_client=client)
  70. tool.call(keyword=' SO20260706001 ', page=2, limit=15, request_id='rq_tool')
  71. self.assertEqual(
  72. {
  73. 'keyword': 'SO20260706001',
  74. 'page': 2,
  75. 'limit': 15,
  76. },
  77. transport.calls[0]['payload'],
  78. )
  79. if __name__ == '__main__':
  80. unittest.main()