Add switch support to Freedompro (#52727)
* Update Freedompro * add test state updates from the API * fix test switch * fix test
This commit is contained in:
parent
b49fb1f657
commit
d09035db2a
4 changed files with 207 additions and 2 deletions
112
tests/components/freedompro/test_switch.py
Normal file
112
tests/components/freedompro/test_switch.py
Normal file
|
@ -0,0 +1,112 @@
|
|||
"""Tests for the Freedompro switch."""
|
||||
from datetime import timedelta
|
||||
from unittest.mock import ANY, patch
|
||||
|
||||
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN, SERVICE_TURN_ON
|
||||
from homeassistant.const import ATTR_ENTITY_ID, SERVICE_TURN_OFF, STATE_OFF, STATE_ON
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
from homeassistant.util.dt import utcnow
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
from tests.components.freedompro.const import DEVICES_STATE
|
||||
|
||||
uid = "3WRRJR6RCZQZSND8VP0YTO3YXCSOFPKBMW8T51TU-LQ*1JKU1MVWHQL-Z9SCUS85VFXMRGNDCDNDDUVVDKBU31W"
|
||||
|
||||
|
||||
async def test_switch_get_state(hass, init_integration):
|
||||
"""Test states of the switch."""
|
||||
init_integration
|
||||
registry = er.async_get(hass)
|
||||
|
||||
entity_id = "switch.irrigation_switch"
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.state == STATE_OFF
|
||||
assert state.attributes.get("friendly_name") == "Irrigation switch"
|
||||
|
||||
entry = registry.async_get(entity_id)
|
||||
assert entry
|
||||
assert entry.unique_id == uid
|
||||
|
||||
get_states_response = list(DEVICES_STATE)
|
||||
for state_response in get_states_response:
|
||||
if state_response["uid"] == uid:
|
||||
state_response["state"]["on"] = True
|
||||
with patch(
|
||||
"homeassistant.components.freedompro.get_states",
|
||||
return_value=get_states_response,
|
||||
):
|
||||
async_fire_time_changed(hass, utcnow() + timedelta(hours=2))
|
||||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.attributes.get("friendly_name") == "Irrigation switch"
|
||||
|
||||
entry = registry.async_get(entity_id)
|
||||
assert entry
|
||||
assert entry.unique_id == uid
|
||||
|
||||
assert state.state == STATE_ON
|
||||
|
||||
|
||||
async def test_switch_set_off(hass, init_integration):
|
||||
"""Test set off of the switch."""
|
||||
init_integration
|
||||
registry = er.async_get(hass)
|
||||
|
||||
entity_id = "switch.irrigation_switch"
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes.get("friendly_name") == "Irrigation switch"
|
||||
|
||||
entry = registry.async_get(entity_id)
|
||||
assert entry
|
||||
assert entry.unique_id == uid
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.freedompro.switch.put_state"
|
||||
) as mock_put_state:
|
||||
assert await hass.services.async_call(
|
||||
SWITCH_DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
{ATTR_ENTITY_ID: [entity_id]},
|
||||
blocking=True,
|
||||
)
|
||||
mock_put_state.assert_called_once_with(ANY, ANY, ANY, '{"on": false}')
|
||||
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == STATE_ON
|
||||
|
||||
|
||||
async def test_switch_set_on(hass, init_integration):
|
||||
"""Test set on of the switch."""
|
||||
init_integration
|
||||
registry = er.async_get(hass)
|
||||
|
||||
entity_id = "switch.irrigation_switch"
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes.get("friendly_name") == "Irrigation switch"
|
||||
|
||||
entry = registry.async_get(entity_id)
|
||||
assert entry
|
||||
assert entry.unique_id == uid
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.freedompro.switch.put_state"
|
||||
) as mock_put_state:
|
||||
assert await hass.services.async_call(
|
||||
SWITCH_DOMAIN,
|
||||
SERVICE_TURN_ON,
|
||||
{ATTR_ENTITY_ID: [entity_id]},
|
||||
blocking=True,
|
||||
)
|
||||
mock_put_state.assert_called_once_with(ANY, ANY, ANY, '{"on": true}')
|
||||
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == STATE_ON
|
Loading…
Add table
Add a link
Reference in a new issue