Add LawnMowerActivity.RETURNING to Lawn Mower (#124261)

* Add returning activity state

* update tests

* update tests

* set can return to returning state

* update MQTT tests

* update mqtt back to docked

* fix up other tests that I broke again

* re-add mower_can_dock
This commit is contained in:
Michael Arthur 2024-08-23 05:13:54 +12:00 committed by GitHub
parent 5d64155bb6
commit 3a92899081
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 51 additions and 5 deletions

View file

@ -30,18 +30,26 @@ async def async_setup_platform(
),
DemoLawnMower(
"kitchen_sink_mower_002",
"Mower can return",
LawnMowerActivity.RETURNING,
LawnMowerEntityFeature.DOCK
| LawnMowerEntityFeature.PAUSE
| LawnMowerEntityFeature.START_MOWING,
),
DemoLawnMower(
"kitchen_sink_mower_003",
"Mower can dock",
LawnMowerActivity.MOWING,
LawnMowerEntityFeature.DOCK | LawnMowerEntityFeature.START_MOWING,
),
DemoLawnMower(
"kitchen_sink_mower_003",
"kitchen_sink_mower_004",
"Mower can pause",
LawnMowerActivity.DOCKED,
LawnMowerEntityFeature.PAUSE | LawnMowerEntityFeature.START_MOWING,
),
DemoLawnMower(
"kitchen_sink_mower_004",
"kitchen_sink_mower_005",
"Mower can do all",
LawnMowerActivity.DOCKED,
LawnMowerEntityFeature.DOCK
@ -49,7 +57,7 @@ async def async_setup_platform(
| LawnMowerEntityFeature.START_MOWING,
),
DemoLawnMower(
"kitchen_sink_mower_005",
"kitchen_sink_mower_006",
"Mower is paused",
LawnMowerActivity.PAUSED,
LawnMowerEntityFeature.DOCK

View file

@ -18,6 +18,9 @@ class LawnMowerActivity(StrEnum):
DOCKED = "docked"
"""Device is docked."""
RETURNING = "returning"
"""Device is returning."""
class LawnMowerEntityFeature(IntFlag):
"""Supported features of the lawn mower entity."""

View file

@ -7,7 +7,8 @@
"error": "Error",
"paused": "[%key:common::state::paused%]",
"mowing": "Mowing",
"docked": "Docked"
"docked": "Docked",
"returning": "Returning"
}
}
},

View file

@ -49,6 +49,18 @@
'last_updated': <ANY>,
'state': 'docked',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'Mower can return',
'supported_features': <LawnMowerEntityFeature: 7>,
}),
'context': <ANY>,
'entity_id': 'lawn_mower.mower_can_return',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'returning',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'Mower is paused',

View file

@ -72,6 +72,12 @@ async def test_states(hass: HomeAssistant, snapshot: SnapshotAssertion) -> None:
LawnMowerActivity.MOWING,
LawnMowerActivity.DOCKED,
),
(
"lawn_mower.mower_can_return",
SERVICE_DOCK,
LawnMowerActivity.RETURNING,
LawnMowerActivity.DOCKED,
),
],
)
async def test_mower(

View file

@ -103,6 +103,13 @@ async def test_run_lawn_mower_setup_and_state_updates(
state = hass.states.get("lawn_mower.test_lawn_mower")
assert state.state == "mowing"
async_fire_mqtt_message(hass, "test/lawn_mower_stat", "returning")
await hass.async_block_till_done()
state = hass.states.get("lawn_mower.test_lawn_mower")
assert state.state == "returning"
async_fire_mqtt_message(hass, "test/lawn_mower_stat", "docked")
await hass.async_block_till_done()
@ -198,6 +205,13 @@ async def test_value_template(
state = hass.states.get("lawn_mower.test_lawn_mower")
assert state.state == "paused"
async_fire_mqtt_message(hass, "test/lawn_mower_stat", '{"val":"returning"}')
await hass.async_block_till_done()
state = hass.states.get("lawn_mower.test_lawn_mower")
assert state.state == "returning"
async_fire_mqtt_message(hass, "test/lawn_mower_stat", '{"val": null}')
await hass.async_block_till_done()
@ -702,7 +716,8 @@ async def test_mqtt_payload_not_a_valid_activity_warning(
assert (
"Invalid activity for lawn_mower.test_lawn_mower: 'painting' "
"(valid activities: ['error', 'paused', 'mowing', 'docked'])" in caplog.text
"(valid activities: ['error', 'paused', 'mowing', 'docked', 'returning'])"
in caplog.text
)
@ -774,6 +789,7 @@ async def test_reloadable(
[
("activity_state_topic", "paused", None, "paused"),
("activity_state_topic", "docked", None, "docked"),
("activity_state_topic", "returning", None, "returning"),
("activity_state_topic", "mowing", None, "mowing"),
],
)