test_server_tools.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from __future__ import annotations
  2. import inspect
  3. import unittest
  4. from unittest.mock import patch
  5. from data_collector_mcp import server
  6. class ServerToolTests(unittest.TestCase):
  7. def test_modbus_device_edit_uses_explicit_parameters(self) -> None:
  8. signature = inspect.signature(server.collector_modbus_device_edit)
  9. self.assertNotIn("payload", signature.parameters)
  10. with patch("data_collector_mcp.server.api_edit_modbus_device", return_value={"state": 0}) as api_edit:
  11. result = server.collector_modbus_device_edit(
  12. project_key="dev-01",
  13. ori_id=1,
  14. name="modbus_tcp_edited",
  15. device_type=1,
  16. ip="127.0.0.1",
  17. port=5502,
  18. slave_id=1,
  19. byte_order=2,
  20. word_order=2,
  21. address_offset=1,
  22. device_group_id=10,
  23. )
  24. self.assertEqual(result, {"state": 0})
  25. api_edit.assert_called_once_with(
  26. "dev-01",
  27. {
  28. "ori_id": 1,
  29. "name": "modbus_tcp_edited",
  30. "device_type": 1,
  31. "ip": "127.0.0.1",
  32. "port": 5502,
  33. "slave_id": 1,
  34. "byte_order": 2,
  35. "word_order": 2,
  36. "serial_port": "",
  37. "timeout": 3,
  38. "is_persistent": True,
  39. "baud_rate": 0,
  40. "data_bit": 0,
  41. "parity": 0,
  42. "stop_bit": 0,
  43. "mode": 0,
  44. "address_offset": 1,
  45. "retry_times": 0,
  46. "device_group_id": 10,
  47. "alarm_interval": 90,
  48. "collect_interval": 5,
  49. },
  50. )
  51. def test_modbus_point_edit_uses_explicit_parameters_with_func_code(self) -> None:
  52. signature = inspect.signature(server.collector_modbus_point_edit)
  53. self.assertNotIn("payload", signature.parameters)
  54. with patch("data_collector_mcp.server.api_edit_modbus_point", return_value={"state": 0}) as api_edit:
  55. result = server.collector_modbus_point_edit(
  56. project_key="dev-01",
  57. ori_id=101,
  58. name="holding_register_uint16_edited",
  59. address=10,
  60. data_type="uint16",
  61. func_code=3,
  62. point_id="HR_UINT16_EDITED",
  63. )
  64. self.assertEqual(result, {"state": 0})
  65. api_edit.assert_called_once_with(
  66. "dev-01",
  67. {
  68. "ori_id": 101,
  69. "name": "holding_register_uint16_edited",
  70. "address": 10,
  71. "type": "uint16",
  72. "point_id": "HR_UINT16_EDITED",
  73. "scale_ratio": 1,
  74. "value_offset": 0,
  75. "group_id": 0,
  76. "invalid_values": "",
  77. "valid_range_start": None,
  78. "valid_range_end": None,
  79. "bit": 0,
  80. "describe": "",
  81. "func_code": 3,
  82. },
  83. )
  84. def test_modbus_point_edit_uses_register_type_when_func_code_is_zero(self) -> None:
  85. with patch("data_collector_mcp.server.api_edit_modbus_point", return_value={"state": 0}) as api_edit:
  86. server.collector_modbus_point_edit(
  87. project_key="dev-01",
  88. ori_id=101,
  89. name="holding_register_uint16_edited",
  90. address=10,
  91. data_type="uint16",
  92. register_type="holding_register",
  93. )
  94. payload = api_edit.call_args.args[1]
  95. self.assertEqual(payload["register_type"], "holding_register")
  96. self.assertNotIn("func_code", payload)
  97. if __name__ == "__main__":
  98. unittest.main()