52 lines
1.5 KiB
Python
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
|