import unittest from app import GatewayApp from mcp_protocol import McpProtocolHandler from services.token_store import InMemoryTokenStore class DummyApiClient: def call_tool(self, tool_code, route_path, payload, request_id): return { 'code': 'MCP_0000', 'msg': 'success', 'data': { 'summary': 'ok', 'records': [], 'tips': [], }, 'meta': { 'request_id': request_id, }, } class NoBindAuthCodeToolTest(unittest.TestCase): def build_handler(self, with_token=True): store = InMemoryTokenStore(refresh_skew_seconds=60) if with_token: store.save('MT_ready', '2099-01-01T00:00:00') app = GatewayApp( auth_client=None, api_client=DummyApiClient(), token_store=store, ) return McpProtocolHandler(app), store def test_tools_list_does_not_include_bind_auth_code(self): handler, _ = self.build_handler() response = handler.handle_request( { 'jsonrpc': '2.0', 'id': 1, 'method': 'tools/list', 'params': {}, } ) names = [tool['name'] for tool in response['result']['tools']] self.assertIn('query_order', names) self.assertIn('query_track', names) self.assertNotIn('bind_auth_code', names) def test_bind_auth_code_call_is_not_registered(self): handler, _ = self.build_handler() response = handler.handle_request( { 'jsonrpc': '2.0', 'id': 2, 'method': 'tools/call', 'params': { 'name': 'bind_auth_code', 'arguments': { 'auth_code': 'AUTH123', }, }, } ) self.assertTrue(response['result']['isError']) self.assertIn('tool not registered', response['result']['content'][0]['text']) def test_query_order_without_token_returns_device_invalid_message(self): handler, _ = self.build_handler(with_token=False) response = handler.handle_request( { 'jsonrpc': '2.0', 'id': 3, 'method': 'tools/call', 'params': { 'name': 'query_order', 'arguments': { 'keyword': 'SO20260706001', }, }, } ) self.assertTrue(response['result']['isError']) self.assertNotIn('授权码', response['result']['content'][0]['text']) self.assertIn('Workbuddy', response['result']['content'][0]['text']) if __name__ == '__main__': unittest.main()