core/tests/components/airly/test_sensor.py

238 lines
8.3 KiB
Python
Raw Normal View History

"""Test sensor of Airly integration."""
from datetime import timedelta
from http import HTTPStatus
from airly.exceptions import AirlyError
from homeassistant.components.airly.sensor import ATTRIBUTION
from homeassistant.components.sensor import (
ATTR_STATE_CLASS,
SensorDeviceClass,
SensorStateClass,
)
from homeassistant.const import (
ATTR_ATTRIBUTION,
ATTR_DEVICE_CLASS,
ATTR_ENTITY_ID,
ATTR_ICON,
ATTR_UNIT_OF_MEASUREMENT,
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
PERCENTAGE,
STATE_UNAVAILABLE,
UnitOfPressure,
UnitOfTemperature,
)
from homeassistant.helpers import entity_registry as er
from homeassistant.setup import async_setup_component
from homeassistant.util.dt import utcnow
from . import API_POINT_URL, init_integration
2020-12-17 15:44:46 +00:00
from tests.common import async_fire_time_changed, load_fixture
2020-12-17 15:44:46 +00:00
async def test_sensor(hass, aioclient_mock):
"""Test states of the sensor."""
2020-12-17 15:44:46 +00:00
await init_integration(hass, aioclient_mock)
registry = er.async_get(hass)
state = hass.states.get("sensor.home_caqi")
assert state
assert state.state == "7"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "CAQI"
assert state.attributes.get(ATTR_ICON) == "mdi:air-filter"
entry = registry.async_get("sensor.home_caqi")
assert entry
assert entry.unique_id == "123-456-caqi"
state = hass.states.get("sensor.home_humidity")
assert state
assert state.state == "68.3"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.HUMIDITY
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_humidity")
assert entry
2020-12-17 15:44:46 +00:00
assert entry.unique_id == "123-456-humidity"
state = hass.states.get("sensor.home_pm1")
assert state
assert state.state == "3"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
)
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.PM1
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_pm1")
assert entry
2020-12-17 15:44:46 +00:00
assert entry.unique_id == "123-456-pm1"
state = hass.states.get("sensor.home_pm2_5")
assert state
assert state.state == "4"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
)
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.PM25
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_pm2_5")
assert entry
assert entry.unique_id == "123-456-pm25"
state = hass.states.get("sensor.home_pm10")
assert state
assert state.state == "6"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
)
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.PM10
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_pm10")
assert entry
assert entry.unique_id == "123-456-pm10"
state = hass.states.get("sensor.home_co")
assert state
assert state.state == "162"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
)
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_co")
assert entry
assert entry.unique_id == "123-456-co"
state = hass.states.get("sensor.home_no2")
assert state
assert state.state == "16"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
)
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.NITROGEN_DIOXIDE
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_no2")
assert entry
assert entry.unique_id == "123-456-no2"
state = hass.states.get("sensor.home_o3")
assert state
assert state.state == "42"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
)
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.OZONE
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_o3")
assert entry
assert entry.unique_id == "123-456-o3"
state = hass.states.get("sensor.home_so2")
assert state
assert state.state == "14"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
)
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.SULPHUR_DIOXIDE
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_so2")
assert entry
assert entry.unique_id == "123-456-so2"
state = hass.states.get("sensor.home_pressure")
assert state
assert state.state == "1020"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfPressure.HPA
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.PRESSURE
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_pressure")
assert entry
2020-12-17 15:44:46 +00:00
assert entry.unique_id == "123-456-pressure"
state = hass.states.get("sensor.home_temperature")
assert state
assert state.state == "14.4"
assert state.attributes.get(ATTR_ATTRIBUTION) == ATTRIBUTION
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfTemperature.CELSIUS
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.TEMPERATURE
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.home_temperature")
assert entry
2020-12-17 15:44:46 +00:00
assert entry.unique_id == "123-456-temperature"
2020-12-17 15:44:46 +00:00
async def test_availability(hass, aioclient_mock):
"""Ensure that we mark the entities unavailable correctly when service is offline."""
2020-12-17 15:44:46 +00:00
await init_integration(hass, aioclient_mock)
state = hass.states.get("sensor.home_humidity")
assert state
assert state.state != STATE_UNAVAILABLE
assert state.state == "68.3"
2020-12-17 15:44:46 +00:00
aioclient_mock.clear_requests()
aioclient_mock.get(
API_POINT_URL, exc=AirlyError(HTTPStatus.NOT_FOUND, {"message": "Not found"})
)
future = utcnow() + timedelta(minutes=60)
2020-12-17 15:44:46 +00:00
async_fire_time_changed(hass, future)
await hass.async_block_till_done()
2020-12-17 15:44:46 +00:00
state = hass.states.get("sensor.home_humidity")
assert state
assert state.state == STATE_UNAVAILABLE
2020-12-17 15:44:46 +00:00
aioclient_mock.clear_requests()
2021-11-02 03:47:05 +00:00
aioclient_mock.get(API_POINT_URL, text=load_fixture("valid_station.json", "airly"))
future = utcnow() + timedelta(minutes=120)
2020-12-17 15:44:46 +00:00
async_fire_time_changed(hass, future)
await hass.async_block_till_done()
2020-12-17 15:44:46 +00:00
state = hass.states.get("sensor.home_humidity")
assert state
assert state.state != STATE_UNAVAILABLE
assert state.state == "68.3"
2020-12-17 15:44:46 +00:00
async def test_manual_update_entity(hass, aioclient_mock):
"""Test manual update entity via service homeassistant/update_entity."""
2020-12-17 15:44:46 +00:00
await init_integration(hass, aioclient_mock)
2020-12-17 15:44:46 +00:00
call_count = aioclient_mock.call_count
await async_setup_component(hass, "homeassistant", {})
2020-12-17 15:44:46 +00:00
await hass.services.async_call(
"homeassistant",
"update_entity",
{ATTR_ENTITY_ID: ["sensor.home_humidity"]},
blocking=True,
)
assert aioclient_mock.call_count == call_count + 1