test_gateway_api.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from __future__ import annotations
  2. import unittest
  3. from unittest.mock import patch
  4. from data_collector_mcp import gateway_api
  5. class GatewayApiTests(unittest.TestCase):
  6. def test_modbus_point_collect_test_posts_gateway_payload(self) -> None:
  7. response = {"code": 0, "msg": "success", "data": {"points": []}}
  8. with patch(
  9. "data_collector_mcp.gateway_api.find_project_config",
  10. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  11. ), patch(
  12. "data_collector_mcp.gateway_api.request_json",
  13. return_value=response,
  14. ) as request_json:
  15. result = gateway_api.modbus_point_collect_test(
  16. "dev-01",
  17. ip="192.168.1.10",
  18. port=502,
  19. slave_id=1,
  20. points=[{"function_code": 3, "address": 7, "type": "int16"}],
  21. )
  22. self.assertEqual(result, response)
  23. request_json.assert_called_once_with(
  24. "POST",
  25. "http://gateway.test/api/dc-gateway/modbus/read_points",
  26. json_payload={
  27. "device_type": "ModbusTCP",
  28. "ip": "192.168.1.10",
  29. "port": 502,
  30. "word_byte_order": "ABCD",
  31. "address_base": 0,
  32. "slave_id": 1,
  33. "points": [{"function_code": 3, "address": 7, "type": "int16"}],
  34. },
  35. )
  36. def test_modbus_point_collect_test_keeps_custom_word_byte_order(self) -> None:
  37. with patch(
  38. "data_collector_mcp.gateway_api.find_project_config",
  39. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  40. ), patch(
  41. "data_collector_mcp.gateway_api.request_json",
  42. return_value={"code": 0},
  43. ) as request_json:
  44. gateway_api.modbus_point_collect_test(
  45. "dev-01",
  46. ip="192.168.1.10",
  47. port=502,
  48. slave_id=1,
  49. word_byte_order="DCBA",
  50. address_base=1,
  51. points=[{"function_code": 4, "address": 0, "type": "float32"}],
  52. )
  53. payload = request_json.call_args.kwargs["json_payload"]
  54. self.assertEqual(payload["word_byte_order"], "DCBA")
  55. self.assertEqual(payload["address_base"], 1)
  56. if __name__ == "__main__":
  57. unittest.main()