core/tests/components/canary/test_sensor.py

204 lines
6.9 KiB
Python

"""The tests for the Canary sensor platform."""
import copy
import unittest
from homeassistant.components.canary import DATA_CANARY, sensor as canary
from homeassistant.components.canary.sensor import (
ATTR_AIR_QUALITY,
SENSOR_TYPES,
STATE_AIR_QUALITY_ABNORMAL,
STATE_AIR_QUALITY_NORMAL,
STATE_AIR_QUALITY_VERY_ABNORMAL,
CanarySensor,
)
from homeassistant.const import TEMP_CELSIUS, UNIT_PERCENTAGE
from tests.async_mock import Mock
from tests.common import get_test_home_assistant
from tests.components.canary.test_init import mock_device, mock_location
VALID_CONFIG = {"canary": {"username": "foo@bar.org", "password": "bar"}}
class TestCanarySensorSetup(unittest.TestCase):
"""Test the Canary platform."""
DEVICES = []
def add_entities(self, devices, action):
"""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()
self.config = copy.deepcopy(VALID_CONFIG)
self.addCleanup(self.hass.stop)
def test_setup_sensors(self):
"""Test the sensor setup."""
online_device_at_home = mock_device(20, "Dining Room", True, "Canary Pro")
offline_device_at_home = mock_device(21, "Front Yard", False, "Canary Pro")
online_device_at_work = mock_device(22, "Office", True, "Canary Pro")
self.hass.data[DATA_CANARY] = Mock()
self.hass.data[DATA_CANARY].locations = [
mock_location(
"Home", True, devices=[online_device_at_home, offline_device_at_home]
),
mock_location("Work", True, devices=[online_device_at_work]),
]
canary.setup_platform(self.hass, self.config, self.add_entities, None)
assert len(self.DEVICES) == 6
def test_temperature_sensor(self):
"""Test temperature sensor with fahrenheit."""
device = mock_device(10, "Family Room", "Canary Pro")
location = mock_location("Home", False)
data = Mock()
data.get_reading.return_value = 21.1234
sensor = CanarySensor(data, SENSOR_TYPES[0], location, device)
sensor.update()
assert sensor.name == "Home Family Room Temperature"
assert sensor.unit_of_measurement == TEMP_CELSIUS
assert sensor.state == 21.12
assert sensor.icon == "mdi:thermometer"
def test_temperature_sensor_with_none_sensor_value(self):
"""Test temperature sensor with fahrenheit."""
device = mock_device(10, "Family Room", "Canary Pro")
location = mock_location("Home", False)
data = Mock()
data.get_reading.return_value = None
sensor = CanarySensor(data, SENSOR_TYPES[0], location, device)
sensor.update()
assert sensor.state is None
def test_humidity_sensor(self):
"""Test humidity sensor."""
device = mock_device(10, "Family Room", "Canary Pro")
location = mock_location("Home")
data = Mock()
data.get_reading.return_value = 50.4567
sensor = CanarySensor(data, SENSOR_TYPES[1], location, device)
sensor.update()
assert sensor.name == "Home Family Room Humidity"
assert sensor.unit_of_measurement == UNIT_PERCENTAGE
assert sensor.state == 50.46
assert sensor.icon == "mdi:water-percent"
def test_air_quality_sensor_with_very_abnormal_reading(self):
"""Test air quality sensor."""
device = mock_device(10, "Family Room", "Canary Pro")
location = mock_location("Home")
data = Mock()
data.get_reading.return_value = 0.4
sensor = CanarySensor(data, SENSOR_TYPES[2], location, device)
sensor.update()
assert sensor.name == "Home Family Room Air Quality"
assert sensor.unit_of_measurement is None
assert sensor.state == 0.4
assert sensor.icon == "mdi:weather-windy"
air_quality = sensor.device_state_attributes[ATTR_AIR_QUALITY]
assert air_quality == STATE_AIR_QUALITY_VERY_ABNORMAL
def test_air_quality_sensor_with_abnormal_reading(self):
"""Test air quality sensor."""
device = mock_device(10, "Family Room", "Canary Pro")
location = mock_location("Home")
data = Mock()
data.get_reading.return_value = 0.59
sensor = CanarySensor(data, SENSOR_TYPES[2], location, device)
sensor.update()
assert sensor.name == "Home Family Room Air Quality"
assert sensor.unit_of_measurement is None
assert sensor.state == 0.59
assert sensor.icon == "mdi:weather-windy"
air_quality = sensor.device_state_attributes[ATTR_AIR_QUALITY]
assert air_quality == STATE_AIR_QUALITY_ABNORMAL
def test_air_quality_sensor_with_normal_reading(self):
"""Test air quality sensor."""
device = mock_device(10, "Family Room", "Canary Pro")
location = mock_location("Home")
data = Mock()
data.get_reading.return_value = 1.0
sensor = CanarySensor(data, SENSOR_TYPES[2], location, device)
sensor.update()
assert sensor.name == "Home Family Room Air Quality"
assert sensor.unit_of_measurement is None
assert sensor.state == 1.0
assert sensor.icon == "mdi:weather-windy"
air_quality = sensor.device_state_attributes[ATTR_AIR_QUALITY]
assert air_quality == STATE_AIR_QUALITY_NORMAL
def test_air_quality_sensor_with_none_sensor_value(self):
"""Test air quality sensor."""
device = mock_device(10, "Family Room", "Canary Pro")
location = mock_location("Home")
data = Mock()
data.get_reading.return_value = None
sensor = CanarySensor(data, SENSOR_TYPES[2], location, device)
sensor.update()
assert sensor.state is None
assert sensor.device_state_attributes is None
def test_battery_sensor(self):
"""Test battery sensor."""
device = mock_device(10, "Family Room", "Canary Flex")
location = mock_location("Home")
data = Mock()
data.get_reading.return_value = 70.4567
sensor = CanarySensor(data, SENSOR_TYPES[4], location, device)
sensor.update()
assert sensor.name == "Home Family Room Battery"
assert sensor.unit_of_measurement == UNIT_PERCENTAGE
assert sensor.state == 70.46
assert sensor.icon == "mdi:battery-70"
def test_wifi_sensor(self):
"""Test battery sensor."""
device = mock_device(10, "Family Room", "Canary Flex")
location = mock_location("Home")
data = Mock()
data.get_reading.return_value = -57
sensor = CanarySensor(data, SENSOR_TYPES[3], location, device)
sensor.update()
assert sensor.name == "Home Family Room Wifi"
assert sensor.unit_of_measurement == "dBm"
assert sensor.state == -57
assert sensor.icon == "mdi:wifi"