Fix Slide local tests (#151569)

Co-authored-by: Erik Montnemery <erik@montnemery.com>
This commit is contained in:
Joost Lekkerkerker
2025-09-02 18:21:38 +02:00
committed by GitHub
parent 61c904d225
commit a8f56e4b96
5 changed files with 48 additions and 29 deletions
+11 -1
View File
@@ -1,11 +1,13 @@
"""Tests for the slide_local integration."""
from typing import Any
from unittest.mock import patch
from homeassistant.components.slide_local.const import DOMAIN
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
from tests.common import MockConfigEntry, load_json_object_fixture
async def setup_platform(
@@ -19,3 +21,11 @@ async def setup_platform(
await hass.async_block_till_done()
return config_entry
def get_data() -> dict[str, Any]:
"""Return the default state data.
The coordinator mutates the returned API data, so we can't return a glocal dict.
"""
return load_json_object_fixture("slide_1.json", DOMAIN)
+3 -2
View File
@@ -8,7 +8,8 @@ import pytest
from homeassistant.components.slide_local.const import CONF_INVERT_POSITION, DOMAIN
from homeassistant.const import CONF_API_VERSION, CONF_HOST, CONF_MAC
from .const import HOST, SLIDE_INFO_DATA
from . import get_data
from .const import HOST
from tests.common import MockConfigEntry
@@ -48,7 +49,7 @@ def mock_slide_api() -> Generator[AsyncMock]:
),
):
client = mock_slide_local_api.return_value
client.slide_info.return_value = SLIDE_INFO_DATA
client.slide_info.return_value = get_data()
yield client
-5
View File
@@ -1,8 +1,3 @@
"""Common const used across tests for slide_local."""
from homeassistant.components.slide_local.const import DOMAIN
from tests.common import load_json_object_fixture
HOST = "127.0.0.2"
SLIDE_INFO_DATA = load_json_object_fixture("slide_1.json", DOMAIN)
@@ -18,8 +18,8 @@ from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from . import setup_platform
from .const import HOST, SLIDE_INFO_DATA
from . import get_data, setup_platform
from .const import HOST
from tests.common import MockConfigEntry
@@ -82,7 +82,10 @@ async def test_user_api_1(
assert result["type"] is FlowResultType.FORM
assert result["errors"] == {}
mock_slide_api.slide_info.side_effect = [None, SLIDE_INFO_DATA]
mock_slide_api.slide_info.side_effect = [
None,
get_data(),
]
result2 = await hass.config_entries.flow.async_configure(
result["flow_id"],
@@ -129,7 +132,10 @@ async def test_user_api_error(
assert result["step_id"] == "user"
assert result["errors"]["base"] == "unknown"
mock_slide_api.slide_info.side_effect = [None, SLIDE_INFO_DATA]
mock_slide_api.slide_info.side_effect = [
None,
get_data(),
]
result2 = await hass.config_entries.flow.async_configure(
result["flow_id"],
@@ -188,7 +194,10 @@ async def test_api_1_exceptions(
assert result["errors"]["base"] == error
# tests with all provided
mock_slide_api.slide_info.side_effect = [None, SLIDE_INFO_DATA]
mock_slide_api.slide_info.side_effect = [
None,
get_data(),
]
result = await hass.config_entries.flow.async_configure(
result["flow_id"],
+20 -16
View File
@@ -20,8 +20,7 @@ from homeassistant.const import ATTR_ENTITY_ID, STATE_UNAVAILABLE, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import setup_platform
from .const import SLIDE_INFO_DATA
from . import get_data, setup_platform
from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform
@@ -48,7 +47,9 @@ async def test_connection_error(
"""Test connection error."""
await setup_platform(hass, mock_config_entry, [Platform.COVER])
mock_slide_api.slide_info.side_effect = [ClientConnectionError, SLIDE_INFO_DATA]
assert hass.states.get("cover.slide_bedroom").state == CoverState.OPEN
mock_slide_api.slide_info.side_effect = [ClientConnectionError, get_data()]
freezer.tick(delta=timedelta(minutes=1))
async_fire_time_changed(hass)
@@ -69,15 +70,13 @@ async def test_state_change(
mock_config_entry: MockConfigEntry,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test connection error."""
"""Test state changes."""
await setup_platform(hass, mock_config_entry, [Platform.COVER])
mock_slide_api.slide_info.side_effect = [
dict(SLIDE_INFO_DATA, pos=0.0),
dict(SLIDE_INFO_DATA, pos=0.4),
dict(SLIDE_INFO_DATA, pos=1.0),
dict(SLIDE_INFO_DATA, pos=0.8),
]
mock_slide_api.slide_info.return_value = {
**get_data(),
"pos": 0.0,
}
freezer.tick(delta=timedelta(minutes=1))
async_fire_time_changed(hass)
@@ -85,18 +84,24 @@ async def test_state_change(
assert hass.states.get("cover.slide_bedroom").state == CoverState.OPEN
mock_slide_api.slide_info.return_value = {**get_data(), "pos": 0.4}
freezer.tick(delta=timedelta(seconds=15))
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert hass.states.get("cover.slide_bedroom").state == CoverState.CLOSING
mock_slide_api.slide_info.return_value = {**get_data(), "pos": 1.0}
freezer.tick(delta=timedelta(seconds=15))
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert hass.states.get("cover.slide_bedroom").state == CoverState.CLOSED
mock_slide_api.slide_info.return_value = {**get_data(), "pos": 0.8}
freezer.tick(delta=timedelta(seconds=15))
async_fire_time_changed(hass)
await hass.async_block_till_done()
@@ -171,12 +176,7 @@ async def test_set_position(
await setup_platform(hass, mock_config_entry, [Platform.COVER])
mock_slide_api.slide_info.side_effect = [
dict(SLIDE_INFO_DATA, pos=0.0),
dict(SLIDE_INFO_DATA, pos=1.0),
dict(SLIDE_INFO_DATA, pos=1.0),
dict(SLIDE_INFO_DATA, pos=0.0),
]
mock_slide_api.slide_info.return_value = {**get_data(), "pos": 0.0}
freezer.tick(delta=timedelta(seconds=15))
async_fire_time_changed(hass)
@@ -189,6 +189,8 @@ async def test_set_position(
blocking=True,
)
mock_slide_api.slide_info.return_value = {**get_data(), "pos": 1.0}
freezer.tick(delta=timedelta(seconds=15))
async_fire_time_changed(hass)
await hass.async_block_till_done()
@@ -206,6 +208,8 @@ async def test_set_position(
blocking=True,
)
mock_slide_api.slide_info.return_value = {**get_data(), "pos": 0.0}
freezer.tick(delta=timedelta(seconds=15))
async_fire_time_changed(hass)
await hass.async_block_till_done()