test_query_order_coverage.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. """
  2. Coverage补充测试:tools/query_order.py
  3. 目标路径:
  4. - call() — api_client is None → RuntimeError
  5. - call() — keyword strip 后为空 → ValueError
  6. """
  7. import unittest
  8. from unittest.mock import MagicMock
  9. from tools.query_order import QueryOrderTool
  10. class QueryOrderToolCoverageTest(unittest.TestCase):
  11. # ---- api_client is None ----
  12. def test_call_raises_when_no_api_client(self):
  13. tool = QueryOrderTool(api_client=None)
  14. with self.assertRaises(RuntimeError) as ctx:
  15. tool.call('some keyword')
  16. self.assertIn('api client is required', str(ctx.exception))
  17. def test_call_raises_when_api_client_not_set(self):
  18. tool = QueryOrderTool()
  19. with self.assertRaises(RuntimeError):
  20. tool.call('kw')
  21. # ---- keyword 为空 ----
  22. def test_call_raises_on_empty_string_keyword(self):
  23. tool = QueryOrderTool(api_client=MagicMock())
  24. with self.assertRaises(ValueError) as ctx:
  25. tool.call('')
  26. self.assertIn('keyword is required', str(ctx.exception))
  27. def test_call_raises_on_whitespace_only_keyword(self):
  28. tool = QueryOrderTool(api_client=MagicMock())
  29. with self.assertRaises(ValueError) as ctx:
  30. tool.call(' ')
  31. self.assertIn('keyword is required', str(ctx.exception))
  32. def test_call_raises_on_tab_keyword(self):
  33. tool = QueryOrderTool(api_client=MagicMock())
  34. with self.assertRaises(ValueError):
  35. tool.call('\t')
  36. # ---- 正常路径(验证 strip 和参数传递)----
  37. def test_call_strips_keyword_before_passing(self):
  38. client = MagicMock()
  39. client.call_tool.return_value = {'code': 'MCP_0000', 'data': {}}
  40. tool = QueryOrderTool(api_client=client)
  41. tool.call(' SO001 ', page=2, limit=50, request_id='rq_test')
  42. _, _, payload, _ = client.call_tool.call_args[0]
  43. self.assertEqual('SO001', payload['keyword'])
  44. def test_call_clamps_limit_to_100(self):
  45. client = MagicMock()
  46. client.call_tool.return_value = {'code': 'MCP_0000', 'data': {}}
  47. tool = QueryOrderTool(api_client=client)
  48. tool.call('kw', limit=999)
  49. _, _, payload, _ = client.call_tool.call_args[0]
  50. self.assertEqual(100, payload['limit'])
  51. def test_call_clamps_page_to_1(self):
  52. client = MagicMock()
  53. client.call_tool.return_value = {'code': 'MCP_0000', 'data': {}}
  54. tool = QueryOrderTool(api_client=client)
  55. tool.call('kw', page=0)
  56. _, _, payload, _ = client.call_tool.call_args[0]
  57. self.assertEqual(1, payload['page'])
  58. def test_metadata_has_required_keyword(self):
  59. tool = QueryOrderTool()
  60. meta = tool.metadata()
  61. self.assertIn('keyword', meta['input_schema']['required'])
  62. self.assertEqual('query_order', meta['name'])
  63. if __name__ == '__main__':
  64. unittest.main()