"""Tests for optimizer area mappings.""" from __future__ import annotations import pytest from custom_components.solaredge_optimizers.areas import ( AreaMappingError, default_area_mapping, parse_area_mapping, serialize_area_mapping, ) def test_site_default_mapping() -> None: """Load the six known areas for site 4886699.""" mapping = default_area_mapping("4886699") assert set(mapping) == {"west1", "west2", "gaube", "süd", "ost1", "ost2"} assert sum(len(optimizer_ids) for optimizer_ids in mapping.values()) == 34 def test_parse_and_serialize_mapping() -> None: """Normalize and serialize a valid mapping.""" mapping = parse_area_mapping( {"west": ["1.1.1", "1.1.2"]}, {"1.1.1", "1.1.2"}, ) assert mapping == {"west": ("1.1.1", "1.1.2")} assert serialize_area_mapping(mapping) == {"west": ["1.1.1", "1.1.2"]} @pytest.mark.parametrize( ("mapping", "error"), [ ({"west": []}, "empty_area"), ({"west": ["1.1.99"]}, "unknown_optimizer"), ( {"west": ["1.1.1"], "roof": ["1.1.1"]}, "duplicate_optimizer", ), ({"süd": ["1.1.1"], "sud": ["1.1.2"]}, "duplicate_area"), ], ) def test_reject_invalid_mapping(mapping: object, error: str) -> None: """Reject invalid mappings with a translated error key.""" with pytest.raises(AreaMappingError) as raised: parse_area_mapping(mapping, {"1.1.1", "1.1.2"}) assert raised.value.translation_key == error