core/tests/components/comfoconnect/test_sensor.py

96 lines
3.3 KiB
Python

"""Tests for the comfoconnect sensor platform."""
from collections.abc import Generator
from unittest.mock import MagicMock, patch
import pytest
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from tests.common import assert_setup_component
COMPONENT = "comfoconnect"
VALID_CONFIG = {
COMPONENT: {"host": "1.2.3.4"},
SENSOR_DOMAIN: {
"platform": COMPONENT,
"resources": [
"current_humidity",
"current_temperature",
"supply_fan_duty",
"power_usage",
"preheater_power_total",
],
},
}
@pytest.fixture
def mock_bridge_discover() -> Generator[MagicMock]:
"""Mock the bridge discover method."""
with patch("pycomfoconnect.bridge.Bridge.discover") as mock_bridge_discover:
mock_bridge_discover.return_value[0].uuid.hex.return_value = "00"
yield mock_bridge_discover
@pytest.fixture
def mock_comfoconnect_command() -> Generator[MagicMock]:
"""Mock the ComfoConnect connect method."""
with patch(
"pycomfoconnect.comfoconnect.ComfoConnect._command"
) as mock_comfoconnect_command:
yield mock_comfoconnect_command
@pytest.fixture
async def setup_sensor(
hass: HomeAssistant,
mock_bridge_discover: MagicMock,
mock_comfoconnect_command: MagicMock,
) -> None:
"""Set up demo sensor component."""
with assert_setup_component(1, SENSOR_DOMAIN):
await async_setup_component(hass, SENSOR_DOMAIN, VALID_CONFIG)
await hass.async_block_till_done()
@pytest.mark.usefixtures("setup_sensor")
async def test_sensors(hass: HomeAssistant) -> None:
"""Test the sensors."""
state = hass.states.get("sensor.comfoairq_inside_humidity")
assert state is not None
assert state.name == "ComfoAirQ Inside humidity"
assert state.attributes.get("unit_of_measurement") == "%"
assert state.attributes.get("device_class") == "humidity"
assert state.attributes.get("icon") is None
state = hass.states.get("sensor.comfoairq_inside_temperature")
assert state is not None
assert state.name == "ComfoAirQ Inside temperature"
assert state.attributes.get("unit_of_measurement") == "°C"
assert state.attributes.get("device_class") == "temperature"
assert state.attributes.get("icon") is None
state = hass.states.get("sensor.comfoairq_supply_fan_duty")
assert state is not None
assert state.name == "ComfoAirQ Supply fan duty"
assert state.attributes.get("unit_of_measurement") == "%"
assert state.attributes.get("device_class") is None
assert state.attributes.get("icon") == "mdi:fan-plus"
state = hass.states.get("sensor.comfoairq_power_usage")
assert state is not None
assert state.name == "ComfoAirQ Power usage"
assert state.attributes.get("unit_of_measurement") == "W"
assert state.attributes.get("device_class") == "power"
assert state.attributes.get("icon") is None
state = hass.states.get("sensor.comfoairq_preheater_energy_total")
assert state is not None
assert state.name == "ComfoAirQ Preheater energy total"
assert state.attributes.get("unit_of_measurement") == "kWh"
assert state.attributes.get("device_class") == "energy"
assert state.attributes.get("icon") is None