test_api.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import pytest
  2. from robot_control.src.api.mqtt_handler import MQTTHandler, MeasurementResult, mqtt
  3. from unittest.mock import Mock, patch
  4. @pytest.fixture
  5. def mock_mqtt_client():
  6. with patch('paho.mqtt.client.Client') as mock_client:
  7. client_instance = Mock()
  8. mock_client.return_value = client_instance
  9. yield client_instance
  10. @pytest.fixture
  11. def mqtt_handler(mock_mqtt_client):
  12. handler = MQTTHandler()
  13. yield handler
  14. handler.cleanup()
  15. # @pytest.fixture
  16. # def real_mqtt_handler():
  17. # handler = MQTTHandler(username="robot", password="robot")
  18. # yield handler
  19. # handler.cleanup()
  20. class TestMQTTHandler:
  21. def test_device_registration(self, mqtt_handler:MQTTHandler):
  22. callback = Mock()
  23. mqtt_handler.register_device("test_device", 4, callback)
  24. assert "test_device" in mqtt_handler.measurement_callbacks
  25. def test_start_measurement(self, mqtt_handler:MQTTHandler, mock_mqtt_client:mqtt.Client):
  26. callback = Mock()
  27. mqtt_handler.register_device("test_device", 4, callback)
  28. mqtt_handler.start_measurement("test_device", 1, 123)
  29. mock_mqtt_client.publish.assert_called_once()
  30. assert mqtt_handler.measurement_callbacks["test_device"][1] == callback
  31. def test_measurement_callback(self, mqtt_handler:MQTTHandler):
  32. callback = Mock()
  33. mqtt_handler.register_device("test_device", 4, callback)
  34. mqtt_handler.start_measurement("test_device", 1, 123)
  35. # Simulate measurement complete message
  36. result = MeasurementResult(
  37. cell_id=123,
  38. device_id="test_device",
  39. slot_id=1,
  40. health=100,
  41. status="complete"
  42. )
  43. # Simulate MQTT message
  44. message = Mock()
  45. message.topic = "measurement_done/test_device"
  46. message.payload = result.model_dump_json().encode()
  47. mqtt_handler.on_message(None, None, message)
  48. callback.assert_called_once()
  49. def test_invalid_device(self, mqtt_handler:MQTTHandler):
  50. with pytest.raises(ValueError):
  51. mqtt_handler.start_measurement("invalid_device", 1, 123)