core/tests/components/group/test_notify.py

92 lines
3.1 KiB
Python

"""The tests for the notify.group platform."""
import asyncio
import unittest
from unittest.mock import MagicMock, patch
import homeassistant.components.demo.notify as demo
import homeassistant.components.group.notify as group
import homeassistant.components.notify as notify
from homeassistant.setup import setup_component
from tests.common import assert_setup_component, get_test_home_assistant
class TestNotifyGroup(unittest.TestCase):
"""Test the notify.group platform."""
def setUp(self): # pylint: disable=invalid-name
"""Set up things to be run when tests are started."""
self.hass = get_test_home_assistant()
self.events = []
self.service1 = demo.DemoNotificationService(self.hass)
self.service2 = demo.DemoNotificationService(self.hass)
self.service1.send_message = MagicMock(autospec=True)
self.service2.send_message = MagicMock(autospec=True)
def mock_get_service(hass, config, discovery_info=None):
if config["name"] == "demo1":
return self.service1
return self.service2
with assert_setup_component(2, notify.DOMAIN), patch.object(
demo, "get_service", mock_get_service
):
setup_component(
self.hass,
notify.DOMAIN,
{
"notify": [
{"name": "demo1", "platform": "demo"},
{"name": "demo2", "platform": "demo"},
]
},
)
self.service = asyncio.run_coroutine_threadsafe(
group.async_get_service(
self.hass,
{
"services": [
{"service": "demo1"},
{
"service": "demo2",
"data": {
"target": "unnamed device",
"data": {"test": "message"},
},
},
]
},
),
self.hass.loop,
).result()
assert self.service is not None
def tearDown(self): # pylint: disable=invalid-name
"""Stop everything that was started."""
self.hass.stop()
def test_send_message_with_data(self):
"""Test sending a message with to a notify group."""
asyncio.run_coroutine_threadsafe(
self.service.async_send_message(
"Hello", title="Test notification", data={"hello": "world"}
),
self.hass.loop,
).result()
self.hass.block_till_done()
assert self.service1.send_message.mock_calls[0][1][0] == "Hello"
assert self.service1.send_message.mock_calls[0][2] == {
"title": "Test notification",
"data": {"hello": "world"},
}
assert self.service2.send_message.mock_calls[0][1][0] == "Hello"
assert self.service2.send_message.mock_calls[0][2] == {
"target": ["unnamed device"],
"title": "Test notification",
"data": {"hello": "world", "test": "message"},
}