mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 12:47:08 +00:00
Fix Amazon devices offline handling (#145656)
This commit is contained in:
parent
ec64194ab9
commit
f73afd71fd
@ -50,4 +50,8 @@ class AmazonEntity(CoordinatorEntity[AmazonDevicesCoordinator]):
|
|||||||
@property
|
@property
|
||||||
def available(self) -> bool:
|
def available(self) -> bool:
|
||||||
"""Return True if entity is available."""
|
"""Return True if entity is available."""
|
||||||
return super().available and self._serial_num in self.coordinator.data
|
return (
|
||||||
|
super().available
|
||||||
|
and self._serial_num in self.coordinator.data
|
||||||
|
and self.device.online
|
||||||
|
)
|
||||||
|
@ -17,6 +17,7 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
|
|
||||||
from . import setup_integration
|
from . import setup_integration
|
||||||
|
from .const import TEST_SERIAL_NUMBER
|
||||||
|
|
||||||
from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform
|
from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform
|
||||||
|
|
||||||
@ -69,3 +70,34 @@ async def test_coordinator_data_update_fails(
|
|||||||
|
|
||||||
assert (state := hass.states.get(entity_id))
|
assert (state := hass.states.get(entity_id))
|
||||||
assert state.state == STATE_UNAVAILABLE
|
assert state.state == STATE_UNAVAILABLE
|
||||||
|
|
||||||
|
|
||||||
|
async def test_offline_device(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
|
mock_amazon_devices_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
) -> None:
|
||||||
|
"""Test offline device handling."""
|
||||||
|
|
||||||
|
entity_id = "binary_sensor.echo_test_connectivity"
|
||||||
|
|
||||||
|
mock_amazon_devices_client.get_devices_data.return_value[
|
||||||
|
TEST_SERIAL_NUMBER
|
||||||
|
].online = False
|
||||||
|
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
|
||||||
|
assert (state := hass.states.get(entity_id))
|
||||||
|
assert state.state == STATE_UNAVAILABLE
|
||||||
|
|
||||||
|
mock_amazon_devices_client.get_devices_data.return_value[
|
||||||
|
TEST_SERIAL_NUMBER
|
||||||
|
].online = True
|
||||||
|
|
||||||
|
freezer.tick(SCAN_INTERVAL)
|
||||||
|
async_fire_time_changed(hass)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert (state := hass.states.get(entity_id))
|
||||||
|
assert state.state != STATE_UNAVAILABLE
|
||||||
|
@ -6,19 +6,21 @@ from freezegun.api import FrozenDateTimeFactory
|
|||||||
import pytest
|
import pytest
|
||||||
from syrupy.assertion import SnapshotAssertion
|
from syrupy.assertion import SnapshotAssertion
|
||||||
|
|
||||||
|
from homeassistant.components.amazon_devices.coordinator import SCAN_INTERVAL
|
||||||
from homeassistant.components.notify import (
|
from homeassistant.components.notify import (
|
||||||
ATTR_MESSAGE,
|
ATTR_MESSAGE,
|
||||||
DOMAIN as NOTIFY_DOMAIN,
|
DOMAIN as NOTIFY_DOMAIN,
|
||||||
SERVICE_SEND_MESSAGE,
|
SERVICE_SEND_MESSAGE,
|
||||||
)
|
)
|
||||||
from homeassistant.const import ATTR_ENTITY_ID, Platform
|
from homeassistant.const import ATTR_ENTITY_ID, STATE_UNAVAILABLE, Platform
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
|
|
||||||
from . import setup_integration
|
from . import setup_integration
|
||||||
|
from .const import TEST_SERIAL_NUMBER
|
||||||
|
|
||||||
from tests.common import MockConfigEntry, snapshot_platform
|
from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||||
@ -68,3 +70,34 @@ async def test_notify_send_message(
|
|||||||
|
|
||||||
assert (state := hass.states.get(entity_id))
|
assert (state := hass.states.get(entity_id))
|
||||||
assert state.state == now.isoformat()
|
assert state.state == now.isoformat()
|
||||||
|
|
||||||
|
|
||||||
|
async def test_offline_device(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
|
mock_amazon_devices_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
) -> None:
|
||||||
|
"""Test offline device handling."""
|
||||||
|
|
||||||
|
entity_id = "notify.echo_test_announce"
|
||||||
|
|
||||||
|
mock_amazon_devices_client.get_devices_data.return_value[
|
||||||
|
TEST_SERIAL_NUMBER
|
||||||
|
].online = False
|
||||||
|
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
|
||||||
|
assert (state := hass.states.get(entity_id))
|
||||||
|
assert state.state == STATE_UNAVAILABLE
|
||||||
|
|
||||||
|
mock_amazon_devices_client.get_devices_data.return_value[
|
||||||
|
TEST_SERIAL_NUMBER
|
||||||
|
].online = True
|
||||||
|
|
||||||
|
freezer.tick(SCAN_INTERVAL)
|
||||||
|
async_fire_time_changed(hass)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert (state := hass.states.get(entity_id))
|
||||||
|
assert state.state != STATE_UNAVAILABLE
|
||||||
|
@ -12,7 +12,13 @@ from homeassistant.components.switch import (
|
|||||||
SERVICE_TURN_OFF,
|
SERVICE_TURN_OFF,
|
||||||
SERVICE_TURN_ON,
|
SERVICE_TURN_ON,
|
||||||
)
|
)
|
||||||
from homeassistant.const import ATTR_ENTITY_ID, STATE_OFF, STATE_ON, Platform
|
from homeassistant.const import (
|
||||||
|
ATTR_ENTITY_ID,
|
||||||
|
STATE_OFF,
|
||||||
|
STATE_ON,
|
||||||
|
STATE_UNAVAILABLE,
|
||||||
|
Platform,
|
||||||
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
|
|
||||||
@ -89,3 +95,34 @@ async def test_switch_dnd(
|
|||||||
assert mock_amazon_devices_client.set_do_not_disturb.call_count == 2
|
assert mock_amazon_devices_client.set_do_not_disturb.call_count == 2
|
||||||
assert (state := hass.states.get(entity_id))
|
assert (state := hass.states.get(entity_id))
|
||||||
assert state.state == STATE_OFF
|
assert state.state == STATE_OFF
|
||||||
|
|
||||||
|
|
||||||
|
async def test_offline_device(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
|
mock_amazon_devices_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
) -> None:
|
||||||
|
"""Test offline device handling."""
|
||||||
|
|
||||||
|
entity_id = "switch.echo_test_do_not_disturb"
|
||||||
|
|
||||||
|
mock_amazon_devices_client.get_devices_data.return_value[
|
||||||
|
TEST_SERIAL_NUMBER
|
||||||
|
].online = False
|
||||||
|
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
|
||||||
|
assert (state := hass.states.get(entity_id))
|
||||||
|
assert state.state == STATE_UNAVAILABLE
|
||||||
|
|
||||||
|
mock_amazon_devices_client.get_devices_data.return_value[
|
||||||
|
TEST_SERIAL_NUMBER
|
||||||
|
].online = True
|
||||||
|
|
||||||
|
freezer.tick(SCAN_INTERVAL)
|
||||||
|
async_fire_time_changed(hass)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert (state := hass.states.get(entity_id))
|
||||||
|
assert state.state != STATE_UNAVAILABLE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user