mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Add persistent_notification.dismiss_all service call (#95004)
This commit is contained in:
parent
3c86497bc8
commit
e4c8a94aaf
@ -140,6 +140,20 @@ def async_dismiss(hass: HomeAssistant, notification_id: str) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def async_dismiss_all(hass: HomeAssistant) -> None:
|
||||||
|
"""Remove all notifications."""
|
||||||
|
notifications = _async_get_or_create_notifications(hass)
|
||||||
|
notifications_copy = notifications.copy()
|
||||||
|
notifications.clear()
|
||||||
|
async_dispatcher_send(
|
||||||
|
hass,
|
||||||
|
SIGNAL_PERSISTENT_NOTIFICATIONS_UPDATED,
|
||||||
|
UpdateType.REMOVED,
|
||||||
|
notifications_copy,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||||
"""Set up the persistent notification component."""
|
"""Set up the persistent notification component."""
|
||||||
|
|
||||||
@ -158,6 +172,11 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
"""Handle the dismiss notification service call."""
|
"""Handle the dismiss notification service call."""
|
||||||
async_dismiss(hass, call.data[ATTR_NOTIFICATION_ID])
|
async_dismiss(hass, call.data[ATTR_NOTIFICATION_ID])
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def dismiss_all_service(call: ServiceCall) -> None:
|
||||||
|
"""Handle the dismiss all notification service call."""
|
||||||
|
async_dismiss_all(hass)
|
||||||
|
|
||||||
hass.services.async_register(
|
hass.services.async_register(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
"create",
|
"create",
|
||||||
@ -175,6 +194,8 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
DOMAIN, "dismiss", dismiss_service, SCHEMA_SERVICE_NOTIFICATION
|
DOMAIN, "dismiss", dismiss_service, SCHEMA_SERVICE_NOTIFICATION
|
||||||
)
|
)
|
||||||
|
|
||||||
|
hass.services.async_register(DOMAIN, "dismiss_all", dismiss_all_service, None)
|
||||||
|
|
||||||
websocket_api.async_register_command(hass, websocket_get_notifications)
|
websocket_api.async_register_command(hass, websocket_get_notifications)
|
||||||
websocket_api.async_register_command(hass, websocket_subscribe_notifications)
|
websocket_api.async_register_command(hass, websocket_subscribe_notifications)
|
||||||
|
|
||||||
|
@ -33,3 +33,7 @@ dismiss:
|
|||||||
example: 1234
|
example: 1234
|
||||||
selector:
|
selector:
|
||||||
text:
|
text:
|
||||||
|
|
||||||
|
dismiss_all:
|
||||||
|
name: Dismiss All
|
||||||
|
description: Remove all notifications.
|
||||||
|
@ -54,11 +54,31 @@ async def test_dismiss_notification(hass: HomeAssistant) -> None:
|
|||||||
pn.async_create(hass, "test", notification_id="Beer 2")
|
pn.async_create(hass, "test", notification_id="Beer 2")
|
||||||
|
|
||||||
assert len(notifications) == 1
|
assert len(notifications) == 1
|
||||||
|
pn.async_dismiss(hass, notification_id="Does Not Exist")
|
||||||
|
|
||||||
|
assert len(notifications) == 1
|
||||||
|
|
||||||
pn.async_dismiss(hass, notification_id="Beer 2")
|
pn.async_dismiss(hass, notification_id="Beer 2")
|
||||||
|
|
||||||
assert len(notifications) == 0
|
assert len(notifications) == 0
|
||||||
|
|
||||||
|
|
||||||
|
async def test_dismiss_all_notifications(hass: HomeAssistant) -> None:
|
||||||
|
"""Ensure removal of all notifications."""
|
||||||
|
notifications = pn._async_get_or_create_notifications(hass)
|
||||||
|
assert len(notifications) == 0
|
||||||
|
|
||||||
|
pn.async_create(hass, "test", notification_id="Beer 2")
|
||||||
|
pn.async_create(hass, "test", notification_id="Beer 3")
|
||||||
|
pn.async_create(hass, "test", notification_id="Beer 4")
|
||||||
|
pn.async_create(hass, "test", notification_id="Beer 5")
|
||||||
|
|
||||||
|
assert len(notifications) == 4
|
||||||
|
pn.async_dismiss_all(hass)
|
||||||
|
|
||||||
|
assert len(notifications) == 0
|
||||||
|
|
||||||
|
|
||||||
async def test_ws_get_notifications(
|
async def test_ws_get_notifications(
|
||||||
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
|
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -169,3 +189,34 @@ async def test_manual_notification_id_round_trip(hass: HomeAssistant) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert len(notifications) == 0
|
assert len(notifications) == 0
|
||||||
|
|
||||||
|
|
||||||
|
async def test_manual_dismiss_all(hass: HomeAssistant) -> None:
|
||||||
|
"""Test the dismiss all service."""
|
||||||
|
notifications = pn._async_get_or_create_notifications(hass)
|
||||||
|
assert len(notifications) == 0
|
||||||
|
|
||||||
|
await hass.services.async_call(
|
||||||
|
pn.DOMAIN,
|
||||||
|
"create",
|
||||||
|
{"notification_id": "Beer 1", "message": "test"},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.services.async_call(
|
||||||
|
pn.DOMAIN,
|
||||||
|
"create",
|
||||||
|
{"notification_id": "Beer 2", "message": "test 2"},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert len(notifications) == 2
|
||||||
|
|
||||||
|
await hass.services.async_call(
|
||||||
|
pn.DOMAIN,
|
||||||
|
"dismiss_all",
|
||||||
|
None,
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert len(notifications) == 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user