Add new service clean_spot
to vacuums (#8862)
* Add new service `clean_spot` to vacuums - Add as base component service, with associated support flag to make it optional - Implement on Demo vacuum - Implement on Xiaomi vacuum - Update tests for platforms Demo and Xiaomi - Change default icon for vacuums to `mdi:roomba`, but keep the one for the Xiaomi - (In a polymer PR: add new service to command toolbar in the 'more-info' card) * Add `clean_spot` service description * fix default properties for vacuum component
This commit is contained in:
parent
d8ca04a4bc
commit
c6aaacbb08
6 changed files with 89 additions and 25 deletions
|
@ -39,7 +39,7 @@ class TestVacuumDemo(unittest.TestCase):
|
|||
def test_supported_features(self):
|
||||
"""Test vacuum supported features."""
|
||||
state = self.hass.states.get(ENTITY_VACUUM_COMPLETE)
|
||||
self.assertEqual(1023, state.attributes.get(ATTR_SUPPORTED_FEATURES))
|
||||
self.assertEqual(2047, state.attributes.get(ATTR_SUPPORTED_FEATURES))
|
||||
self.assertEqual("Charging", state.attributes.get(ATTR_STATUS))
|
||||
self.assertEqual(100, state.attributes.get(ATTR_BATTERY_LEVEL))
|
||||
self.assertEqual("medium", state.attributes.get(ATTR_FAN_SPEED))
|
||||
|
@ -141,6 +141,12 @@ class TestVacuumDemo(unittest.TestCase):
|
|||
state = self.hass.states.get(ENTITY_VACUUM_COMPLETE)
|
||||
self.assertEqual(FAN_SPEEDS[-1], state.attributes.get(ATTR_FAN_SPEED))
|
||||
|
||||
vacuum.clean_spot(self.hass, entity_id=ENTITY_VACUUM_COMPLETE)
|
||||
self.hass.block_till_done()
|
||||
state = self.hass.states.get(ENTITY_VACUUM_COMPLETE)
|
||||
self.assertIn("spot", state.attributes.get(ATTR_STATUS))
|
||||
self.assertEqual(STATE_ON, state.state)
|
||||
|
||||
def test_unsupported_methods(self):
|
||||
"""Test service calls for unsupported vacuums."""
|
||||
self.hass.states.set(ENTITY_VACUUM_NONE, STATE_ON)
|
||||
|
@ -189,6 +195,12 @@ class TestVacuumDemo(unittest.TestCase):
|
|||
self.assertNotEqual(FAN_SPEEDS[-1],
|
||||
state.attributes.get(ATTR_FAN_SPEED))
|
||||
|
||||
vacuum.clean_spot(self.hass, entity_id=ENTITY_VACUUM_BASIC)
|
||||
self.hass.block_till_done()
|
||||
state = self.hass.states.get(ENTITY_VACUUM_BASIC)
|
||||
self.assertNotIn("spot", state.attributes.get(ATTR_STATUS))
|
||||
self.assertEqual(STATE_OFF, state.state)
|
||||
|
||||
def test_services(self):
|
||||
"""Test vacuum services."""
|
||||
# Test send_command
|
||||
|
|
|
@ -8,9 +8,9 @@ import pytest
|
|||
from homeassistant.components.vacuum import (
|
||||
ATTR_BATTERY_ICON,
|
||||
ATTR_FAN_SPEED, ATTR_FAN_SPEED_LIST, DOMAIN,
|
||||
SERVICE_LOCATE, SERVICE_RETURN_TO_BASE, SERVICE_SEND_COMMAND,
|
||||
SERVICE_SET_FAN_SPEED, SERVICE_START_PAUSE, SERVICE_STOP,
|
||||
SERVICE_TOGGLE, SERVICE_TURN_OFF, SERVICE_TURN_ON)
|
||||
SERVICE_CLEAN_SPOT, SERVICE_LOCATE, SERVICE_RETURN_TO_BASE,
|
||||
SERVICE_SEND_COMMAND, SERVICE_SET_FAN_SPEED, SERVICE_START_PAUSE,
|
||||
SERVICE_STOP, SERVICE_TOGGLE, SERVICE_TURN_OFF, SERVICE_TURN_ON)
|
||||
from homeassistant.components.vacuum.xiaomi import (
|
||||
ATTR_CLEANED_AREA, ATTR_CLEANING_TIME, ATTR_DO_NOT_DISTURB, ATTR_ERROR,
|
||||
CONF_HOST, CONF_NAME, CONF_TOKEN, PLATFORM,
|
||||
|
@ -112,7 +112,7 @@ def test_xiaomi_vacuum_services(hass, caplog, mock_mirobo_is_off):
|
|||
state = hass.states.get(entity_id)
|
||||
|
||||
assert state.state == STATE_OFF
|
||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == 1023
|
||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == 2047
|
||||
assert state.attributes.get(ATTR_DO_NOT_DISTURB) == STATE_ON
|
||||
assert state.attributes.get(ATTR_ERROR) == 'Error message'
|
||||
assert (state.attributes.get(ATTR_BATTERY_ICON)
|
||||
|
@ -159,6 +159,11 @@ def test_xiaomi_vacuum_services(hass, caplog, mock_mirobo_is_off):
|
|||
assert str(mock_mirobo_is_off.mock_calls[-2]) == 'call.Vacuum().find()'
|
||||
assert str(mock_mirobo_is_off.mock_calls[-1]) == 'call.Vacuum().status()'
|
||||
|
||||
yield from hass.services.async_call(
|
||||
DOMAIN, SERVICE_CLEAN_SPOT, {}, blocking=True)
|
||||
assert str(mock_mirobo_is_off.mock_calls[-2]) == 'call.Vacuum().spot()'
|
||||
assert str(mock_mirobo_is_off.mock_calls[-1]) == 'call.Vacuum().status()'
|
||||
|
||||
# Set speed service:
|
||||
yield from hass.services.async_call(
|
||||
DOMAIN, SERVICE_SET_FAN_SPEED, {"fan_speed": 60}, blocking=True)
|
||||
|
@ -193,7 +198,7 @@ def test_xiaomi_vacuum_services(hass, caplog, mock_mirobo_is_off):
|
|||
|
||||
|
||||
@asyncio.coroutine
|
||||
def test_xiaomi_vacuum_specific_services(hass, caplog, mock_mirobo_is_on):
|
||||
def test_xiaomi_specific_services(hass, caplog, mock_mirobo_is_on):
|
||||
"""Test vacuum supported features."""
|
||||
entity_name = 'test_vacuum_cleaner_2'
|
||||
entity_id = '{}.{}'.format(DOMAIN, entity_name)
|
||||
|
@ -210,7 +215,7 @@ def test_xiaomi_vacuum_specific_services(hass, caplog, mock_mirobo_is_on):
|
|||
# Check state attributes
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == 1023
|
||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == 2047
|
||||
assert state.attributes.get(ATTR_DO_NOT_DISTURB) == STATE_OFF
|
||||
assert state.attributes.get(ATTR_ERROR) is None
|
||||
assert (state.attributes.get(ATTR_BATTERY_ICON)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue