113 lines
3.2 KiB
Python
113 lines
3.2 KiB
Python
|
"""Test Roborock Scene platform."""
|
||
|
|
||
|
from unittest.mock import ANY, patch
|
||
|
|
||
|
import pytest
|
||
|
from roborock import RoborockException
|
||
|
|
||
|
from homeassistant.const import SERVICE_TURN_ON, Platform
|
||
|
from homeassistant.core import HomeAssistant
|
||
|
from homeassistant.exceptions import HomeAssistantError
|
||
|
|
||
|
from tests.common import MockConfigEntry
|
||
|
|
||
|
|
||
|
@pytest.fixture
|
||
|
def bypass_api_client_get_scenes_fixture(bypass_api_fixture) -> None:
|
||
|
"""Fixture to raise when getting scenes."""
|
||
|
with (
|
||
|
patch(
|
||
|
"homeassistant.components.roborock.RoborockApiClient.get_scenes",
|
||
|
side_effect=RoborockException(),
|
||
|
),
|
||
|
):
|
||
|
yield
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("entity_id"),
|
||
|
[
|
||
|
("scene.roborock_s7_maxv_sc1"),
|
||
|
("scene.roborock_s7_maxv_sc2"),
|
||
|
],
|
||
|
)
|
||
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||
|
async def test_get_scenes_failure(
|
||
|
hass: HomeAssistant,
|
||
|
bypass_api_client_get_scenes_fixture,
|
||
|
setup_entry: MockConfigEntry,
|
||
|
entity_id: str,
|
||
|
) -> None:
|
||
|
"""Test that if scene retrieval fails, no entity is being created."""
|
||
|
# Ensure that the entity does not exist
|
||
|
assert hass.states.get(entity_id) is None
|
||
|
|
||
|
|
||
|
@pytest.fixture
|
||
|
def platforms() -> list[Platform]:
|
||
|
"""Fixture to set platforms used in the test."""
|
||
|
return [Platform.SCENE]
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("entity_id", "scene_id"),
|
||
|
[
|
||
|
("scene.roborock_s7_maxv_sc1", 12),
|
||
|
("scene.roborock_s7_maxv_sc2", 24),
|
||
|
],
|
||
|
)
|
||
|
@pytest.mark.freeze_time("2023-10-30 08:50:00")
|
||
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||
|
async def test_execute_success(
|
||
|
hass: HomeAssistant,
|
||
|
bypass_api_fixture,
|
||
|
setup_entry: MockConfigEntry,
|
||
|
entity_id: str,
|
||
|
scene_id: int,
|
||
|
) -> None:
|
||
|
"""Test activating the scene entities."""
|
||
|
with patch(
|
||
|
"homeassistant.components.roborock.RoborockApiClient.execute_scene"
|
||
|
) as mock_execute_scene:
|
||
|
await hass.services.async_call(
|
||
|
"scene",
|
||
|
SERVICE_TURN_ON,
|
||
|
blocking=True,
|
||
|
target={"entity_id": entity_id},
|
||
|
)
|
||
|
mock_execute_scene.assert_called_once_with(ANY, scene_id)
|
||
|
assert hass.states.get(entity_id).state == "2023-10-30T08:50:00+00:00"
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("entity_id", "scene_id"),
|
||
|
[
|
||
|
("scene.roborock_s7_maxv_sc1", 12),
|
||
|
],
|
||
|
)
|
||
|
@pytest.mark.freeze_time("2023-10-30 08:50:00")
|
||
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||
|
async def test_execute_failure(
|
||
|
hass: HomeAssistant,
|
||
|
bypass_api_fixture,
|
||
|
setup_entry: MockConfigEntry,
|
||
|
entity_id: str,
|
||
|
scene_id: int,
|
||
|
) -> None:
|
||
|
"""Test failure while activating the scene entity."""
|
||
|
with (
|
||
|
patch(
|
||
|
"homeassistant.components.roborock.RoborockApiClient.execute_scene",
|
||
|
side_effect=RoborockException,
|
||
|
) as mock_execute_scene,
|
||
|
pytest.raises(HomeAssistantError, match="Error while calling execute_scene"),
|
||
|
):
|
||
|
await hass.services.async_call(
|
||
|
"scene",
|
||
|
SERVICE_TURN_ON,
|
||
|
blocking=True,
|
||
|
target={"entity_id": entity_id},
|
||
|
)
|
||
|
mock_execute_scene.assert_called_once_with(ANY, scene_id)
|
||
|
assert hass.states.get(entity_id).state == "2023-10-30T08:50:00+00:00"
|