test_scoped_clients.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import unittest
  2. from services.scoped_api_client import ScopedApiClient
  3. from services.scoped_auth_client import ScopedAuthClient
  4. class FakeTransport:
  5. def __init__(self):
  6. self.calls = []
  7. def post_json(self, url, payload, headers, timeout):
  8. self.calls.append((url, payload, headers, timeout))
  9. return {'code': 'MCP_0000', 'data': {'ok': True}}
  10. class ScopedApiClientTest(unittest.TestCase):
  11. def test_call_tool_uses_explicit_token_not_global_store(self):
  12. transport = FakeTransport()
  13. client = ScopedApiClient('https://tools.example.com', transport=transport, timeout=7)
  14. response = client.call_tool(
  15. token='MT_employee_a',
  16. tool_code='query_order',
  17. route_path='/mcp/tools/queryOrder',
  18. payload={'keyword': 'USC'},
  19. request_id='rq_public_1',
  20. )
  21. self.assertEqual('MCP_0000', response['code'])
  22. url, payload, headers, timeout = transport.calls[0]
  23. self.assertEqual('https://tools.example.com/mcp/tools/queryOrder', url)
  24. self.assertEqual('Bearer MT_employee_a', headers['Authorization'])
  25. self.assertEqual('query_order', headers['X-MCP-Tool-Code'])
  26. self.assertEqual('rq_public_1', headers['X-Request-Id'])
  27. self.assertEqual(7, timeout)
  28. class ScopedAuthClientTest(unittest.TestCase):
  29. def test_exchange_sends_gateway_session_key_and_stores_token(self):
  30. transport = FakeTransport()
  31. store = {}
  32. class Store:
  33. def save(self, gateway_session_id, session):
  34. store[gateway_session_id] = session
  35. return session
  36. def post_json(url, payload, headers, timeout):
  37. transport.calls.append((url, payload, headers, timeout))
  38. return {
  39. 'code': 'MCP_0000',
  40. 'data': {
  41. 'mcp_token': 'MT_employee_a',
  42. 'expire_time': '2099-12-31 23:59:59',
  43. 'admin_id': 1,
  44. 'company_id': 10,
  45. },
  46. }
  47. transport.post_json = post_json
  48. client = ScopedAuthClient(
  49. base_url='https://base.example.com',
  50. client_type='workbuddy',
  51. session_store=Store(),
  52. transport=transport,
  53. timeout=5,
  54. )
  55. response = client.exchange('GWS_employee_a', 'AUTH_CODE_A')
  56. self.assertEqual('MCP_0000', response['code'])
  57. url, payload, headers, timeout = transport.calls[0]
  58. self.assertEqual('https://base.example.com/mcp/auth/exchange', url)
  59. self.assertEqual('AUTH_CODE_A', payload['auth_code'])
  60. self.assertEqual('workbuddy', payload['client_type'])
  61. self.assertEqual('gws_' + 'GWS_employee_a', payload['session_key'])
  62. self.assertEqual('MT_employee_a', store['GWS_employee_a']['mcp_token'])
  63. if __name__ == '__main__':
  64. unittest.main()