8000 test(roomba): more coverage · home-assistant/core@6b07fed · GitHub
[go: up one dir, main page]

Skip to content

Commit 6b07fed

Browse files
committed
test(roomba): more coverage
1 parent d94f882 commit 6b07fed

File tree

2 files changed

+101
-1
lines changed

2 files changed

+101
-1
lines changed

tests/components/roomba/test_entity.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,53 @@ def test_dock_tank_level_property(mock_roomba: Roomba) -> None:
5454
"""Test the dock tank level property of the IRobotEntity."""
5555
entity = DummyEntity(mock_roomba, "blid123")
5656
assert entity.dock_tank_level == 99
57+
58+
59+
def test_has_dock_property_false() -> None:
60+
"""Test has_dock property returns False when dock is empty."""
61+
mock_state = {
62+
"tankLvl": 42,
63+
"dock": {},
64+
"hwPartsRev": {"navSerialNo": "12345", "wlan0HwAddr": "AA:BB:CC:DD:EE:FF"},
65+
"sku": "980",
66+
"name": "Test Roomba",
67+
"softwareVer": "3.2.1",
68+
"hardwareRev": "1.0",
69+
}
70+
roomba = MagicMock()
71+
roomba.master_state = {"state": {"reported": mock_state}}
72+
entity = DummyEntity(roomba, "blid123")
73+
assert entity.has_dock is False
74+
75+
76+
def test_tank_level_none() -> None:
77+
"""Test tank_level property returns None if not present."""
78+
mock_state = {
79+
"dock": {"tankLvl": 99},
80+
"hwPartsRev": {"navSerialNo": "12345", "wlan0HwAddr": "AA:BB:CC:DD:EE:FF"},
81+
"sku": "980",
82+
"name": "Test Roomba",
83+
"softwareVer": "3.2.1",
84+
"hardwareRev": "1.0",
85+
}
86+
roomba = MagicMock()
87+
roomba.master_state = {"state": {"reported": mock_state}}
88+
entity = DummyEntity(roomba, "blid123")
89+
assert entity.tank_level is None
90+
91+
92+
def test_dock_tank_level_none() -> None:
93+
"""Test dock_tank_level property returns None if not present."""
94+
mock_state = {
95+
"tankLvl": 42,
96+
"dock": {},
97+
"hwPartsRev": {"navSerialNo": "12345", "wlan0HwAddr": "AA:BB:CC:DD:EE:FF"},
98+
"sku": "980",
99+
"name": "Test Roomba",
100+
"softwareVer": "3.2.1",
101+
"hardwareRev": "1.0",
102+
}
103+
roomba = MagicMock()
104+
roomba.master_state = {"state": {"reported": mock_state}}
105+
entity = DummyEntity(roomba, "blid123")
106+
assert entity.dock_tank_level is None

tests/components/roomba/test_vacuum.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
"""Tests for IRobotEntity usage in Roomba vacuum platform."""
22

3+
from collections.abc import Iterable
34
from typing import Any
45
from unittest.mock import MagicMock
56

67
import pytest
78
from roombapy import Roomba
89

9-
from homeassistant.components.roomba.vacuum import IRobotVacuum
10+
from homeassistant.components.roomba.models import RoombaData
11+
from homeassistant.components.roomba.vacuum import (
12+
BraavaJet,
13+
IRobotVacuum,
14+
RoombaVacuum,
15+
RoombaVacuumCarpetBoost,
16+
async_setup_entry,
17+
)
18+
from homeassistant.config_entries import ConfigEntry
19+
from homeassistant.core import HomeAssistant
20+
from homeassistant.helpers.entity import Entity
1021

1122

1223
@pytest.fixture
@@ -56,3 +67,42 @@ def test_ir_robot_vacuum_properties(mock_roomba: Roomba) -> None:
5667
assert "software_version" in attrs
5768
assert "status" in attrs
5869
assert "position" in attrs
70+
71+
72+
@pytest.mark.asyncio
73+
@pytest.mark.parametrize(
74+
("state", "expected_class"),
75+
[
76+
({"cap": {}, "detectedPad": True}, BraavaJet),
77+
({"cap": {"carpetBoost": 1}}, RoombaVacuumCarpetBoost),
78+
({"cap": {"carpetBoost": 0}}, RoombaVacuum),
79+
({"cap": {}}, RoombaVacuum),
80+
],
81+
)
82+
async def test_async_setup_entry_selects_correct_class(
83+
mock_roomba: Roomba, state: dict[str, Any], expected_class: type[IRobotVacuum]
84+
) -> None:
85+
"""Test async_setup_entry selects the correct vacuum class based on state."""
86+
# Setup mocks
87+
hass = MagicMock(spec=HomeAssistant)
88+
config_entry = MagicMock(spec=ConfigEntry)
89+
config_entry.entry_id = "test_entry"
90+
master_state = {"state": {"reported": state}}
91+
mock_roomba.master_state.update(master_state)
92+
blid = "blid123"
93+
hass.data = {"roomba": {"test_entry": RoombaData(roomba=mock_roomba, blid=blid)}}
94+
95+
added_entities: list[Entity] = []
96+
97+
def async_add_entities(
98+
new_entities: Iterable[Entity],
99+
update_before_add: bool = False,
100+
*,
101+
config_subentry_id: str | None = None,
102+
) -> None:
103+
added_entities.extend(list(new_entities))
104+
105+
await async_setup_entry(hass, config_entry, async_add_entities)
106+
assert len(added_entities) == 1
107+
108+
assert isinstance(added_entities[0], expected_class)

0 commit comments

Comments
 (0)
0