import unittest
import mqtt_light_controller
class _StubMqttClient:
def __init__(self):
self.published = []
def publish(self, topic, payload, qos=0):
self.published.append((topic, payload, qos))
class TestMqttLightController(unittest.TestCase):
def test_control_light_rejects_invalid_state(self):
result = mqtt_light_controller.control_light.fn("invalid")
self.assertFalse(result["success"])
def test_control_light_publishes_message(self):
original = mqtt_light_controller.mqtt_client
stub = _StubMqttClient()
mqtt_light_controller.mqtt_client = stub
try:
result = mqtt_light_controller.control_light.fn("on")
self.assertTrue(result["success"])
self.assertEqual(len(stub.published), 1)
topic, payload, qos = stub.published[0]
self.assertEqual(topic, mqtt_light_controller.MQTT_CONTROL_TOPIC)
self.assertIn('"action": "on"', payload)
self.assertEqual(qos, 1)
finally:
mqtt_light_controller.mqtt_client = original
def test_adjust_brightness_range_validation(self):
result = mqtt_light_controller.adjust_brightness.fn(-1)
self.assertFalse(result["success"])
result = mqtt_light_controller.adjust_brightness.fn(101)
self.assertFalse(result["success"])
def test_adjust_brightness_publishes_message(self):
original = mqtt_light_controller.mqtt_client
stub = _StubMqttClient()
mqtt_light_controller.mqtt_client = stub
try:
result = mqtt_light_controller.adjust_brightness.fn(42)
self.assertTrue(result["success"])
self.assertEqual(len(stub.published), 1)
topic, payload, qos = stub.published[0]
self.assertEqual(topic, mqtt_light_controller.MQTT_CONTROL_TOPIC)
self.assertIn('"action": "adjust_brightness"', payload)
self.assertIn('"brightness": 42', payload)
self.assertEqual(qos, 1)
finally:
mqtt_light_controller.mqtt_client = original
if __name__ == "__main__":
unittest.main()