from __future__ import annotations import unittest from unittest.mock import patch from app.network.wled import DiscoveredWledDevice, discover_wled_devices, fetch_wled_info, probe_wled_device class WledDiscoveryTests(unittest.TestCase): def test_fetch_wled_info_falls_back_to_json_endpoint(self) -> None: with patch( "app.network.wled._load_json", side_effect=[ None, {"info": {"name": "Tile 1", "mac": "AA:BB:CC:DD:EE:FF", "leds": {"count": 106}}}, ], ): result = fetch_wled_info("192.0.2.10") self.assertIsNotNone(result) payload, endpoint = result self.assertEqual(endpoint, "/json") self.assertEqual(payload["name"], "Tile 1") def test_probe_wled_device_extracts_metadata(self) -> None: with patch( "app.network.wled.fetch_wled_info", return_value=( {"name": "Tile 1", "mac": "aa-bb-cc-dd-ee-ff", "leds": {"count": 106}}, "/json/info", ), ), patch("app.network.wled._reverse_dns_name", return_value="tile1.local"): device = probe_wled_device("192.0.2.10") self.assertIsNotNone(device) self.assertEqual(device.ip_address, "192.0.2.10") self.assertEqual(device.hostname, "tile1.local") self.assertEqual(device.instance_name, "Tile 1") self.assertEqual(device.mac_address, "AA:BB:CC:DD:EE:FF") self.assertEqual(device.led_count, 106) def test_discover_wled_devices_deduplicates_devices_by_mac(self) -> None: responses = { "host-a": DiscoveredWledDevice(ip_address="192.0.2.10", mac_address="AA:BB:CC:DD:EE:FF"), "host-b": DiscoveredWledDevice(ip_address="192.0.2.10", mac_address="AA:BB:CC:DD:EE:FF"), "host-c": None, } with patch("app.network.wled.probe_wled_device", side_effect=lambda host, timeout_s=0.35: responses[host]): devices = discover_wled_devices(["host-a", "host-b", "host-c"], max_workers=1) self.assertEqual(len(devices), 1) self.assertEqual(devices[0].mac_address, "AA:BB:CC:DD:EE:FF") if __name__ == "__main__": unittest.main()