forked from home-assistant/core
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for Shelly sensor platform (home-assistant#82385)
- Loading branch information
Showing
3 changed files
with
172 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
"""Tests for Shelly sensor platform.""" | ||
|
||
|
||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN | ||
from homeassistant.core import State | ||
|
||
from . import ( | ||
init_integration, | ||
mock_rest_update, | ||
mutate_rpc_device_status, | ||
register_device, | ||
register_entity, | ||
) | ||
|
||
from tests.common import mock_restore_cache | ||
|
||
RELAY_BLOCK_ID = 0 | ||
SENSOR_BLOCK_ID = 3 | ||
|
||
|
||
async def test_block_sensor(hass, mock_block_device, monkeypatch): | ||
"""Test block sensor.""" | ||
entity_id = f"{SENSOR_DOMAIN}.test_name_channel_1_power" | ||
await init_integration(hass, 1) | ||
|
||
assert hass.states.get(entity_id).state == "53.4" | ||
|
||
monkeypatch.setattr(mock_block_device.blocks[RELAY_BLOCK_ID], "power", 60.1) | ||
mock_block_device.mock_update() | ||
|
||
assert hass.states.get(entity_id).state == "60.1" | ||
|
||
|
||
async def test_block_rest_sensor(hass, mock_block_device, monkeypatch): | ||
"""Test block REST sensor.""" | ||
entity_id = register_entity(hass, SENSOR_DOMAIN, "test_name_rssi", "rssi") | ||
await init_integration(hass, 1) | ||
|
||
assert hass.states.get(entity_id).state == "-64" | ||
|
||
monkeypatch.setitem(mock_block_device.status["wifi_sta"], "rssi", -71) | ||
await mock_rest_update(hass) | ||
|
||
assert hass.states.get(entity_id).state == "-71" | ||
|
||
|
||
async def test_block_sleeping_sensor(hass, mock_block_device, monkeypatch): | ||
"""Test block sleeping sensor.""" | ||
entity_id = f"{SENSOR_DOMAIN}.test_name_temperature" | ||
await init_integration(hass, 1, sleep_period=1000) | ||
|
||
# Sensor should be created when device is online | ||
assert hass.states.get(entity_id) is None | ||
|
||
# Make device online | ||
mock_block_device.mock_update() | ||
await hass.async_block_till_done() | ||
|
||
assert hass.states.get(entity_id).state == "22.1" | ||
|
||
monkeypatch.setattr(mock_block_device.blocks[SENSOR_BLOCK_ID], "temp", 23.4) | ||
mock_block_device.mock_update() | ||
|
||
assert hass.states.get(entity_id).state == "23.4" | ||
|
||
|
||
async def test_block_restored_sleeping_sensor( | ||
hass, mock_block_device, device_reg, monkeypatch | ||
): | ||
"""Test block restored sleeping sensor.""" | ||
entry = await init_integration(hass, 1, sleep_period=1000, skip_setup=True) | ||
register_device(device_reg, entry) | ||
entity_id = register_entity( | ||
hass, SENSOR_DOMAIN, "test_name_temperature", "sensor_0-temp", entry | ||
) | ||
mock_restore_cache(hass, [State(entity_id, "20.4")]) | ||
monkeypatch.setattr(mock_block_device, "initialized", False) | ||
await hass.config_entries.async_setup(entry.entry_id) | ||
await hass.async_block_till_done() | ||
|
||
assert hass.states.get(entity_id).state == "20.4" | ||
|
||
# Make device online | ||
monkeypatch.setattr(mock_block_device, "initialized", True) | ||
mock_block_device.mock_update() | ||
await hass.async_block_till_done() | ||
|
||
assert hass.states.get(entity_id).state == "22.1" | ||
|
||
|
||
async def test_rpc_sensor(hass, mock_rpc_device, monkeypatch) -> None: | ||
"""Test RPC sensor.""" | ||
entity_id = f"{SENSOR_DOMAIN}.test_cover_0_power" | ||
await init_integration(hass, 2) | ||
|
||
assert hass.states.get(entity_id).state == "85.3" | ||
|
||
mutate_rpc_device_status(monkeypatch, mock_rpc_device, "cover:0", "apower", "88.2") | ||
mock_rpc_device.mock_update() | ||
|
||
assert hass.states.get(entity_id).state == "88.2" | ||
|
||
|
||
async def test_rpc_sleeping_sensor( | ||
hass, mock_rpc_device, device_reg, monkeypatch | ||
) -> None: | ||
"""Test RPC online sleeping sensor.""" | ||
entity_id = f"{SENSOR_DOMAIN}.test_name_temperature" | ||
entry = await init_integration(hass, 2, sleep_period=1000) | ||
|
||
# Sensor should be created when device is online | ||
assert hass.states.get(entity_id) is None | ||
|
||
register_entity( | ||
hass, | ||
SENSOR_DOMAIN, | ||
"test_name_temperature", | ||
"temperature:0-temperature_0", | ||
entry, | ||
) | ||
|
||
# Make device online | ||
mock_rpc_device.mock_update() | ||
await hass.async_block_till_done() | ||
|
||
assert hass.states.get(entity_id).state == "22.9" | ||
|
||
mutate_rpc_device_status(monkeypatch, mock_rpc_device, "temperature:0", "tC", 23.4) | ||
mock_rpc_device.mock_update() | ||
|
||
assert hass.states.get(entity_id).state == "23.4" | ||
|
||
|
||
async def test_rpc_restored_sleeping_sensor( | ||
hass, mock_rpc_device, device_reg, monkeypatch | ||
): | ||
"""Test RPC restored sensor.""" | ||
entry = await init_integration(hass, 2, sleep_period=1000, skip_setup=True) | ||
register_device(device_reg, entry) | ||
entity_id = register_entity( | ||
hass, | ||
SENSOR_DOMAIN, | ||
"test_name_temperature", | ||
"temperature:0-temperature_0", | ||
entry, | ||
) | ||
|
||
mock_restore_cache(hass, [State(entity_id, "21.0")]) | ||
monkeypatch.setattr(mock_rpc_device, "initialized", False) | ||
|
||
await hass.config_entries.async_setup(entry.entry_id) | ||
await hass.async_block_till_done() | ||
|
||
assert hass.states.get(entity_id).state == "21.0" | ||
|
||
# Make device online | ||
monkeypatch.setattr(mock_rpc_device, "initialized", True) | ||
mock_rpc_device.mock_update() | ||
await hass.async_block_till_done() | ||
|
||
assert hass.states.get(entity_id).state == "22.9" |