mirror of
https://github.com/home-assistant/core.git
synced 2025-11-08 18:39:30 +00:00
Support CO2/PM2.5/Light sensors in HomeKit (#13804)
* Support co2/light/air sensor in HomeKit * Add tests * Added tests * changed device_class lux to light
This commit is contained in:
@@ -2,13 +2,15 @@
|
||||
import unittest
|
||||
|
||||
import voluptuous as vol
|
||||
import pytest
|
||||
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.components.homekit.accessories import HomeBridge
|
||||
from homeassistant.components.homekit.const import HOMEKIT_NOTIFY_ID
|
||||
from homeassistant.components.homekit.util import (
|
||||
show_setup_message, dismiss_setup_message, convert_to_float,
|
||||
temperature_to_homekit, temperature_to_states, ATTR_CODE)
|
||||
temperature_to_homekit, temperature_to_states, ATTR_CODE,
|
||||
density_to_air_quality)
|
||||
from homeassistant.components.homekit.util import validate_entity_config \
|
||||
as vec
|
||||
from homeassistant.components.persistent_notification import (
|
||||
@@ -20,6 +22,52 @@ from homeassistant.const import (
|
||||
from tests.common import get_test_home_assistant
|
||||
|
||||
|
||||
def test_validate_entity_config():
|
||||
"""Test validate entities."""
|
||||
configs = [{'invalid_entity_id': {}}, {'demo.test': 1},
|
||||
{'demo.test': 'test'}, {'demo.test': [1, 2]},
|
||||
{'demo.test': None}]
|
||||
|
||||
for conf in configs:
|
||||
with pytest.raises(vol.Invalid):
|
||||
vec(conf)
|
||||
|
||||
assert vec({}) == {}
|
||||
assert vec({'alarm_control_panel.demo': {ATTR_CODE: '1234'}}) == \
|
||||
{'alarm_control_panel.demo': {ATTR_CODE: '1234'}}
|
||||
|
||||
|
||||
def test_convert_to_float():
|
||||
"""Test convert_to_float method."""
|
||||
assert convert_to_float(12) == 12
|
||||
assert convert_to_float(12.4) == 12.4
|
||||
assert convert_to_float(STATE_UNKNOWN) is None
|
||||
assert convert_to_float(None) is None
|
||||
|
||||
|
||||
def test_temperature_to_homekit():
|
||||
"""Test temperature conversion from HA to HomeKit."""
|
||||
assert temperature_to_homekit(20.46, TEMP_CELSIUS) == 20.5
|
||||
assert temperature_to_homekit(92.1, TEMP_FAHRENHEIT) == 33.4
|
||||
|
||||
|
||||
def test_temperature_to_states():
|
||||
"""Test temperature conversion from HomeKit to HA."""
|
||||
assert temperature_to_states(20, TEMP_CELSIUS) == 20.0
|
||||
assert temperature_to_states(20.2, TEMP_FAHRENHEIT) == 68.4
|
||||
|
||||
|
||||
def test_density_to_air_quality():
|
||||
"""Test map PM2.5 density to HomeKit AirQuality level."""
|
||||
assert density_to_air_quality(0) == 1
|
||||
assert density_to_air_quality(35) == 1
|
||||
assert density_to_air_quality(35.1) == 2
|
||||
assert density_to_air_quality(75) == 2
|
||||
assert density_to_air_quality(115) == 3
|
||||
assert density_to_air_quality(150) == 4
|
||||
assert density_to_air_quality(300) == 5
|
||||
|
||||
|
||||
class TestUtil(unittest.TestCase):
|
||||
"""Test all HomeKit util methods."""
|
||||
|
||||
@@ -39,21 +87,6 @@ class TestUtil(unittest.TestCase):
|
||||
"""Stop down everything that was started."""
|
||||
self.hass.stop()
|
||||
|
||||
def test_validate_entity_config(self):
|
||||
"""Test validate entities."""
|
||||
configs = [{'invalid_entity_id': {}}, {'demo.test': 1},
|
||||
{'demo.test': 'test'}, {'demo.test': [1, 2]},
|
||||
{'demo.test': None}]
|
||||
|
||||
for conf in configs:
|
||||
with self.assertRaises(vol.Invalid):
|
||||
vec(conf)
|
||||
|
||||
self.assertEqual(vec({}), {})
|
||||
self.assertEqual(
|
||||
vec({'alarm_control_panel.demo': {ATTR_CODE: '1234'}}),
|
||||
{'alarm_control_panel.demo': {ATTR_CODE: '1234'}})
|
||||
|
||||
def test_show_setup_msg(self):
|
||||
"""Test show setup message as persistence notification."""
|
||||
bridge = HomeBridge(self.hass)
|
||||
@@ -83,20 +116,3 @@ class TestUtil(unittest.TestCase):
|
||||
self.assertEqual(
|
||||
data[ATTR_SERVICE_DATA].get(ATTR_NOTIFICATION_ID, None),
|
||||
HOMEKIT_NOTIFY_ID)
|
||||
|
||||
def test_convert_to_float(self):
|
||||
"""Test convert_to_float method."""
|
||||
self.assertEqual(convert_to_float(12), 12)
|
||||
self.assertEqual(convert_to_float(12.4), 12.4)
|
||||
self.assertIsNone(convert_to_float(STATE_UNKNOWN))
|
||||
self.assertIsNone(convert_to_float(None))
|
||||
|
||||
def test_temperature_to_homekit(self):
|
||||
"""Test temperature conversion from HA to HomeKit."""
|
||||
self.assertEqual(temperature_to_homekit(20.46, TEMP_CELSIUS), 20.5)
|
||||
self.assertEqual(temperature_to_homekit(92.1, TEMP_FAHRENHEIT), 33.4)
|
||||
|
||||
def test_temperature_to_states(self):
|
||||
"""Test temperature conversion from HomeKit to HA."""
|
||||
self.assertEqual(temperature_to_states(20, TEMP_CELSIUS), 20.0)
|
||||
self.assertEqual(temperature_to_states(20.2, TEMP_FAHRENHEIT), 68.4)
|
||||
|
||||
Reference in New Issue
Block a user