61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
import unittest
|
|
|
|
from app.config.xml_mapping import config_to_xml_string, load_config, load_config_from_string, validate_config
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
SAMPLE_MAPPING = ROOT / "sample_data" / "infinity_mirror_mapping_clean.xml"
|
|
|
|
|
|
class XmlMappingTests(unittest.TestCase):
|
|
def test_sample_mapping_loads_and_validates(self) -> None:
|
|
config = load_config(SAMPLE_MAPPING)
|
|
self.assertEqual(config.logical_display.rows, 3)
|
|
self.assertEqual(config.logical_display.cols, 6)
|
|
self.assertEqual(len(config.tiles), 18)
|
|
self.assertTrue(validate_config(config).is_valid)
|
|
|
|
def test_round_trip_preserves_tile_count_and_ids(self) -> None:
|
|
config = load_config(SAMPLE_MAPPING)
|
|
xml_text = config_to_xml_string(config)
|
|
restored = load_config_from_string(xml_text)
|
|
self.assertEqual(len(restored.tiles), len(config.tiles))
|
|
self.assertEqual([tile.tile_id for tile in restored.sorted_tiles()], [tile.tile_id for tile in config.sorted_tiles()])
|
|
|
|
def test_round_trip_preserves_optional_controller_metadata(self) -> None:
|
|
config = load_config(SAMPLE_MAPPING)
|
|
tile = config.tile_lookup()["r1c1"]
|
|
tile.controller_host = "wled-r1c1.local"
|
|
tile.controller_name = "Front Left"
|
|
tile.controller_mac = "AA:BB:CC:DD:EE:FF"
|
|
|
|
restored = load_config_from_string(config_to_xml_string(config))
|
|
restored_tile = restored.tile_lookup()["r1c1"]
|
|
|
|
self.assertEqual(restored_tile.controller_ip, tile.controller_ip)
|
|
self.assertEqual(restored_tile.controller_host, "wled-r1c1.local")
|
|
self.assertEqual(restored_tile.controller_name, "Front Left")
|
|
self.assertEqual(restored_tile.controller_mac, "AA:BB:CC:DD:EE:FF")
|
|
|
|
def test_sample_mapping_first_row_is_not_left_right_mirrored(self) -> None:
|
|
config = load_config(SAMPLE_MAPPING)
|
|
first_row = [tile.screen_name for tile in config.sorted_tiles() if tile.row == 1]
|
|
self.assertEqual(
|
|
first_row,
|
|
[
|
|
"Lumiverse 1",
|
|
"Lumiverse 4",
|
|
"Lumiverse 7",
|
|
"Lumiverse 10",
|
|
"Lumiverse 13",
|
|
"Lumiverse 16",
|
|
],
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|