"""The tests for Kira sensor platform."""
import unittest
from unittest.mock import MagicMock

from homeassistant.components.sensor import kira as kira

from tests.common import get_test_home_assistant

TEST_CONFIG = {kira.DOMAIN: {
    'sensors': [{'host': '127.0.0.1',
                 'port': 17324}]}}

DISCOVERY_INFO = {
    'name': 'kira',
    'device': 'kira'
}


class TestKiraSensor(unittest.TestCase):
    """Tests the Kira Sensor platform."""

    # pylint: disable=invalid-name
    DEVICES = []

    def add_devices(self, devices):
        """Mock add devices."""
        for device in devices:
            self.DEVICES.append(device)

    def setUp(self):
        """Initialize values for this testcase class."""
        self.hass = get_test_home_assistant()
        mock_kira = MagicMock()
        self.hass.data[kira.DOMAIN] = {kira.CONF_SENSOR: {}}
        self.hass.data[kira.DOMAIN][kira.CONF_SENSOR]['kira'] = mock_kira

    def tearDown(self):
        """Stop everything that was started."""
        self.hass.stop()

    # pylint: disable=protected-access
    def test_kira_sensor_callback(self):
        """Ensure Kira sensor properly updates its attributes from callback."""
        kira.setup_platform(self.hass, TEST_CONFIG, self.add_devices,
                            DISCOVERY_INFO)
        assert len(self.DEVICES) == 1
        sensor = self.DEVICES[0]

        assert sensor.name == 'kira'

        sensor.hass = self.hass

        codeName = 'FAKE_CODE'
        deviceName = 'FAKE_DEVICE'
        codeTuple = (codeName, deviceName)
        sensor._update_callback(codeTuple)

        assert sensor.state == codeName
        assert sensor.device_state_attributes == {kira.CONF_DEVICE: deviceName}