|
1 | 1 | """Tests for IRobotEntity usage in Roomba vacuum platform."""
|
2 | 2 |
|
| 3 | +from collections.abc import Iterable |
3 | 4 | from typing import Any
|
4 | 5 | from unittest.mock import MagicMock
|
5 | 6 |
|
6 | 7 | import pytest
|
7 | 8 | from roombapy import Roomba
|
8 | 9 |
|
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 |
10 | 21 |
|
11 | 22 |
|
12 | 23 | @pytest.fixture
|
@@ -56,3 +67,42 @@ def test_ir_robot_vacuum_properties(mock_roomba: Roomba) -> None:
|
56 | 67 | assert "software_version" in attrs
|
57 | 68 | assert "status" in attrs
|
58 | 69 | 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