Files
RFP_Infinity-Vis/tests/test_device_assignment.py

52 lines
2.0 KiB
Python

from __future__ import annotations
import unittest
from app.config.device_assignment import assign_device_to_tile, find_tile_for_device
from app.config.models import InfinityMirrorConfig, LogicalDisplayConfig, TileConfig
from app.network.wled import DiscoveredWledDevice
class DeviceAssignmentTests(unittest.TestCase):
def _config(self) -> InfinityMirrorConfig:
return InfinityMirrorConfig(
logical_display=LogicalDisplayConfig(rows=1, cols=2),
tiles=[
TileConfig(tile_id="r1c1", row=1, col=1, controller_ip="192.0.2.10", controller_mac="AA:BB:CC:DD:EE:01"),
TileConfig(tile_id="r1c2", row=1, col=2, controller_ip="192.0.2.11", controller_mac="AA:BB:CC:DD:EE:02"),
],
)
def test_find_tile_prefers_mac_match_over_stale_ip(self) -> None:
config = self._config()
device = DiscoveredWledDevice(ip_address="192.0.2.42", mac_address="AA:BB:CC:DD:EE:01")
matched = find_tile_for_device(config, device)
self.assertIsNotNone(matched)
self.assertEqual(matched.tile_id, "r1c1")
def test_assign_device_moves_previous_assignment_and_overwrites_target(self) -> None:
config = self._config()
device = DiscoveredWledDevice(
ip_address="192.0.2.42",
hostname="tile-42.local",
instance_name="Tile 42",
mac_address="AA:BB:CC:DD:EE:01",
)
assign_device_to_tile(config, device, "r1c2")
source_tile = config.tile_lookup()["r1c1"]
target_tile = config.tile_lookup()["r1c2"]
self.assertEqual(source_tile.controller_ip, "")
self.assertEqual(source_tile.controller_mac, "")
self.assertEqual(target_tile.controller_ip, "192.0.2.42")
self.assertEqual(target_tile.controller_host, "tile-42.local")
self.assertEqual(target_tile.controller_name, "Tile 42")
self.assertEqual(target_tile.controller_mac, "AA:BB:CC:DD:EE:01")
if __name__ == "__main__":
unittest.main()