Skip to content

Commit d008ff7

Browse files
committed
Add tests for API section and hot water group validation logic
1 parent db14300 commit d008ff7

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

tests/test_api_validation.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,17 @@ async def test_validate_api_section_no_api_data() -> None:
115115
await bsblan._validator._validate_api_section("device")
116116

117117

118+
@pytest.mark.asyncio
119+
async def test_get_section_params_no_api_data() -> None:
120+
"""Test selected section parameter lookup without API data."""
121+
async with aiohttp.ClientSession() as session:
122+
bsblan = BSBLAN(BSBLANConfig(host="example.com"), session=session)
123+
bsblan._api_data = None
124+
125+
with pytest.raises(BSBLANError, match=ErrorMsg.API_DATA_NOT_INITIALIZED):
126+
bsblan._validator._get_section_params("device", None)
127+
128+
118129
@pytest.mark.asyncio
119130
async def test_validate_api_section_invalid_section() -> None:
120131
"""Test API section validation with invalid section."""
@@ -235,6 +246,19 @@ async def test_validate_section_already_validated(monkeypatch: Any) -> None:
235246
assert response_data is None
236247

237248

249+
@pytest.mark.asyncio
250+
async def test_validate_api_section_skips_covered_parameters() -> None:
251+
"""Test section validation returns when every selected ID is covered."""
252+
async with aiohttp.ClientSession() as session:
253+
bsblan = BSBLAN(BSBLANConfig(host="example.com"), session=session)
254+
bsblan._supports_full_config = True
255+
bsblan._api_data = {"heating": {"700": "operating_mode"}} # type: ignore[assignment]
256+
bsblan._validator._api_validator = APIValidator(bsblan._api_data)
257+
bsblan._validator._api_validator.validated_parameters["heating"] = {"700"}
258+
259+
assert await bsblan._validator._validate_api_section("heating") is None
260+
261+
238262
@pytest.mark.asyncio
239263
async def test_validation_error_resets_section(monkeypatch: Any) -> None:
240264
"""Test that validation errors reset the section (line 212)."""

tests/test_hot_water_additional.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,30 @@ async def test_ensure_hot_water_group_double_check_after_lock() -> None:
541541
bsblan._request.assert_not_awaited() # type: ignore[attr-defined]
542542

543543

544+
@pytest.mark.asyncio
545+
async def test_ensure_hot_water_group_skips_recheck_without_uncovered_params(
546+
monkeypatch: Any,
547+
) -> None:
548+
"""Test the locked recheck skips a group whose IDs are already covered."""
549+
async with aiohttp.ClientSession() as session:
550+
bsblan = BSBLAN(BSBLANConfig(host="example.com"), session=session)
551+
bsblan._supports_full_config = True
552+
bsblan._api_data = {"hot_water": {"1600": "operating_mode"}} # type: ignore[assignment]
553+
bsblan._validator._api_validator = APIValidator(bsblan._api_data)
554+
bsblan._validator._validated_hot_water_parameters["essential"] = {"1600"}
555+
bsblan._request = AsyncMock() # type: ignore[method-assign]
556+
557+
monkeypatch.setattr(
558+
bsblan._validator,
559+
"_are_hot_water_parameters_validated",
560+
lambda _group_name, _parameter_ids: False,
561+
)
562+
563+
await bsblan._ensure_hot_water_group_validated("essential", {"1600"})
564+
565+
bsblan._request.assert_not_awaited() # type: ignore[attr-defined]
566+
567+
544568
@pytest.mark.asyncio
545569
async def test_ensure_hot_water_group_concurrent_double_check() -> None:
546570
"""Test that concurrent hot water group validation doesn't duplicate."""

0 commit comments

Comments
 (0)