mirror of
https://github.com/home-assistant/core.git
synced 2026-04-12 20:56:18 +02:00
Fix polling pause in Husqvarna Automower (#167397)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -184,10 +184,8 @@ class AutomowerDataUpdateCoordinator(DataUpdateCoordinator[MowerDictionary]):
|
||||
)
|
||||
|
||||
def _should_poll(self) -> bool:
|
||||
"""Return True if at least one mower is connected and at least one is not OFF."""
|
||||
return any(mower.metadata.connected for mower in self.data.values()) and any(
|
||||
mower.mower.state != MowerStates.OFF for mower in self.data.values()
|
||||
)
|
||||
"""Return True if at least one mower is not OFF."""
|
||||
return any(mower.mower.state != MowerStates.OFF for mower in self.data.values())
|
||||
|
||||
async def _pong_watchdog(self) -> None:
|
||||
"""Watchdog to check for pong messages."""
|
||||
|
||||
@@ -516,27 +516,12 @@ async def test_add_and_remove_work_area(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("mower1_connected", "mower1_state", "mower2_connected", "mower2_state"),
|
||||
[
|
||||
(True, MowerStates.OFF, False, MowerStates.OFF), # False
|
||||
(False, MowerStates.PAUSED, False, MowerStates.OFF), # False
|
||||
(False, MowerStates.OFF, True, MowerStates.OFF), # False
|
||||
(False, MowerStates.OFF, False, MowerStates.PAUSED), # False
|
||||
(True, MowerStates.OFF, True, MowerStates.OFF), # False
|
||||
(False, MowerStates.OFF, False, MowerStates.OFF), # False
|
||||
],
|
||||
)
|
||||
async def test_dynamic_polling(
|
||||
hass: HomeAssistant,
|
||||
mock_automower_client,
|
||||
mock_config_entry,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
values: dict[str, MowerAttributes],
|
||||
mower1_connected: bool,
|
||||
mower1_state: MowerStates,
|
||||
mower2_connected: bool,
|
||||
mower2_state: MowerStates,
|
||||
) -> None:
|
||||
"""Test that the ws_ready_callback triggers an attempt to start the Watchdog task.
|
||||
|
||||
@@ -579,10 +564,8 @@ async def test_dynamic_polling(
|
||||
assert mock_automower_client.get_status.call_count == 2
|
||||
|
||||
# websocket is still active, but mowers are inactive -> no polling required
|
||||
poll_values[TEST_MOWER_ID].metadata.connected = mower1_connected
|
||||
poll_values[TEST_MOWER_ID].mower.state = mower1_state
|
||||
poll_values["1234"].metadata.connected = mower2_connected
|
||||
poll_values["1234"].mower.state = mower2_state
|
||||
poll_values[TEST_MOWER_ID].mower.state = MowerStates.OFF
|
||||
poll_values["1234"].mower.state = MowerStates.OFF
|
||||
|
||||
mock_automower_client.get_status.return_value = poll_values
|
||||
freezer.tick(SCAN_INTERVAL)
|
||||
@@ -608,9 +591,7 @@ async def test_dynamic_polling(
|
||||
# websocket is still active, and mowers are active -> polling required
|
||||
mock_automower_client.get_status.reset_mock()
|
||||
assert mock_automower_client.get_status.call_count == 0
|
||||
poll_values[TEST_MOWER_ID].metadata.connected = True
|
||||
poll_values[TEST_MOWER_ID].mower.state = MowerStates.PAUSED
|
||||
poll_values["1234"].metadata.connected = False
|
||||
poll_values["1234"].mower.state = MowerStates.OFF
|
||||
websocket_values = deepcopy(poll_values)
|
||||
callback_holder["data_cb"](websocket_values)
|
||||
@@ -623,17 +604,6 @@ async def test_dynamic_polling(
|
||||
assert mock_automower_client.get_status.call_count == 2
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("mower1_connected", "mower1_state", "mower2_connected", "mower2_state"),
|
||||
[
|
||||
(True, MowerStates.OFF, False, MowerStates.OFF), # False
|
||||
(False, MowerStates.PAUSED, False, MowerStates.OFF), # False
|
||||
(False, MowerStates.OFF, True, MowerStates.OFF), # False
|
||||
(False, MowerStates.OFF, False, MowerStates.PAUSED), # False
|
||||
(True, MowerStates.OFF, True, MowerStates.OFF), # False
|
||||
(False, MowerStates.OFF, False, MowerStates.OFF), # False
|
||||
],
|
||||
)
|
||||
async def test_websocket_watchdog(
|
||||
hass: HomeAssistant,
|
||||
mock_automower_client,
|
||||
@@ -641,10 +611,6 @@ async def test_websocket_watchdog(
|
||||
freezer: FrozenDateTimeFactory,
|
||||
entity_registry: er.EntityRegistry,
|
||||
values: dict[str, MowerAttributes],
|
||||
mower1_connected: bool,
|
||||
mower1_state: MowerStates,
|
||||
mower2_connected: bool,
|
||||
mower2_state: MowerStates,
|
||||
) -> None:
|
||||
"""Test that the ws_ready_callback triggers an attempt to start the Watchdog task.
|
||||
|
||||
@@ -686,10 +652,8 @@ async def test_websocket_watchdog(
|
||||
assert mock_automower_client.get_status.call_count == 2
|
||||
|
||||
# websocket is still active, but mowers are inactive -> no polling required
|
||||
poll_values[TEST_MOWER_ID].metadata.connected = mower1_connected
|
||||
poll_values[TEST_MOWER_ID].mower.state = mower1_state
|
||||
poll_values["1234"].metadata.connected = mower2_connected
|
||||
poll_values["1234"].mower.state = mower2_state
|
||||
poll_values[TEST_MOWER_ID].mower.state = MowerStates.OFF
|
||||
poll_values["1234"].mower.state = MowerStates.OFF
|
||||
|
||||
mock_automower_client.get_status.return_value = poll_values
|
||||
freezer.tick(SCAN_INTERVAL)
|
||||
|
||||
Reference in New Issue
Block a user