"""The tests for the notify.group platform."""
import unittest

from homeassistant.bootstrap import setup_component
import homeassistant.components.notify as notify
from homeassistant.components.notify import group

from tests.common import get_test_home_assistant


class TestNotifyGroup(unittest.TestCase):
    """Test the notify.group platform."""

    def setUp(self):  # pylint: disable=invalid-name
        """Setup things to be run when tests are started."""
        self.hass = get_test_home_assistant()
        self.events = []
        self.assertTrue(setup_component(self.hass, notify.DOMAIN, {
            'notify': [{
                'name': 'demo1',
                'platform': 'demo'
            }, {
                'name': 'demo2',
                'platform': 'demo'
            }]
        }))

        self.service = group.get_service(self.hass, {'services': [
            {'service': 'demo1'},
            {'service': 'demo2',
             'data': {'target': 'unnamed device',
                      'data': {'test': 'message'}}}]})

        assert self.service is not None

        def record_event(event):
            """Record event to send notification."""
            self.events.append(event)

        self.hass.bus.listen("notify", record_event)

    def tearDown(self):  # pylint: disable=invalid-name
        """"Stop everything that was started."""
        self.hass.stop()

    def test_send_message_to_group(self):
        """Test sending a message to a notify group."""
        self.service.send_message('Hello', title='Test notification')
        self.hass.block_till_done()
        self.assertTrue(len(self.events) == 2)
        last_event = self.events[-1]
        self.assertEqual(last_event.data[notify.ATTR_TITLE],
                         'Test notification')
        self.assertEqual(last_event.data[notify.ATTR_MESSAGE], 'Hello')

    def test_send_message_with_data(self):
        """Test sending a message with to a notify group."""
        notify_data = {'hello': 'world'}
        self.service.send_message('Hello', title='Test notification',
                                  data=notify_data)
        self.hass.block_till_done()
        last_event = self.events[-1]
        self.assertEqual(last_event.data[notify.ATTR_TITLE],
                         'Test notification')
        self.assertEqual(last_event.data[notify.ATTR_MESSAGE], 'Hello')
        self.assertEqual(last_event.data[notify.ATTR_DATA], notify_data)

    def test_entity_data_passes_through(self):
        """Test sending a message with data to merge to a notify group."""
        notify_data = {'hello': 'world'}
        self.service.send_message('Hello', title='Test notification',
                                  data=notify_data)
        self.hass.block_till_done()
        data = self.events[-1].data
        assert {
            'message': 'Hello',
            'target': ['unnamed device'],
            'title': 'Test notification',
            'data': {'hello': 'world', 'test': 'message'}
        } == data
