Add configurable optimizer area sensors
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user