Files

52 lines
1.5 KiB
Python

"""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