Add DSMR Reader tests (#115808)
* Add DSMR Reader sensor tests * Change to paramatization * Removing patch * Emulate the test * Go for 100% test coverage * Adding defintions.py * Add myself as code owner to keep improvingpull/118301/head
parent
98710e6c91
commit
fb95b91507
|
@ -256,9 +256,6 @@ omit =
|
|||
homeassistant/components/dormakaba_dkey/sensor.py
|
||||
homeassistant/components/dovado/*
|
||||
homeassistant/components/downloader/__init__.py
|
||||
homeassistant/components/dsmr_reader/__init__.py
|
||||
homeassistant/components/dsmr_reader/definitions.py
|
||||
homeassistant/components/dsmr_reader/sensor.py
|
||||
homeassistant/components/dte_energy_bridge/sensor.py
|
||||
homeassistant/components/dublin_bus_transport/sensor.py
|
||||
homeassistant/components/dunehd/__init__.py
|
||||
|
|
|
@ -342,8 +342,8 @@ build.json @home-assistant/supervisor
|
|||
/tests/components/drop_connect/ @ChandlerSystems @pfrazer
|
||||
/homeassistant/components/dsmr/ @Robbie1221 @frenck
|
||||
/tests/components/dsmr/ @Robbie1221 @frenck
|
||||
/homeassistant/components/dsmr_reader/ @sorted-bits @glodenox
|
||||
/tests/components/dsmr_reader/ @sorted-bits @glodenox
|
||||
/homeassistant/components/dsmr_reader/ @sorted-bits @glodenox @erwindouna
|
||||
/tests/components/dsmr_reader/ @sorted-bits @glodenox @erwindouna
|
||||
/homeassistant/components/duotecno/ @cereal2nd
|
||||
/tests/components/duotecno/ @cereal2nd
|
||||
/homeassistant/components/dwd_weather_warnings/ @runningman84 @stephan192 @andarotajo
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"domain": "dsmr_reader",
|
||||
"name": "DSMR Reader",
|
||||
"codeowners": ["@sorted-bits", "@glodenox"],
|
||||
"codeowners": ["@sorted-bits", "@glodenox", "@erwindouna"],
|
||||
"config_flow": true,
|
||||
"dependencies": ["mqtt"],
|
||||
"documentation": "https://www.home-assistant.io/integrations/dsmr_reader",
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
"""Test the DSMR Reader definitions."""
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.dsmr_reader.const import DOMAIN
|
||||
from homeassistant.components.dsmr_reader.definitions import (
|
||||
DSMRReaderSensorEntityDescription,
|
||||
dsmr_transform,
|
||||
tariff_transform,
|
||||
)
|
||||
from homeassistant.components.dsmr_reader.sensor import DSMRSensor
|
||||
from homeassistant.const import STATE_UNKNOWN
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from tests.common import MockConfigEntry, async_fire_mqtt_message
|
||||
from tests.typing import MqttMockHAClient
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("input", "expected"),
|
||||
[
|
||||
("20", 2.0),
|
||||
("version 5", "version 5"),
|
||||
],
|
||||
)
|
||||
async def test_dsmr_transform(input, expected) -> None:
|
||||
"""Test the dsmr_transform function."""
|
||||
assert dsmr_transform(input) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("input", "expected"),
|
||||
[
|
||||
("1", "low"),
|
||||
("0", "high"),
|
||||
],
|
||||
)
|
||||
async def test_tariff_transform(input, expected) -> None:
|
||||
"""Test the tariff_transform function."""
|
||||
assert tariff_transform(input) == expected
|
||||
|
||||
|
||||
async def test_entity_tariff(
|
||||
hass: HomeAssistant,
|
||||
mqtt_mock: MqttMockHAClient,
|
||||
):
|
||||
"""Test the state attribute of DSMRReaderSensorEntityDescription when a tariff transform is needed."""
|
||||
config_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title=DOMAIN,
|
||||
options={},
|
||||
entry_id="TEST_ENTRY_ID",
|
||||
unique_id="UNIQUE_TEST_ID",
|
||||
)
|
||||
config_entry.add_to_hass(hass)
|
||||
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
# Test if the payload is empty
|
||||
async_fire_mqtt_message(hass, "dsmr/meter-stats/electricity_tariff", "")
|
||||
await hass.async_block_till_done()
|
||||
|
||||
electricity_tariff = "sensor.dsmr_meter_stats_electricity_tariff"
|
||||
assert hass.states.get(electricity_tariff).state == STATE_UNKNOWN
|
||||
|
||||
# Test high tariff
|
||||
async_fire_mqtt_message(hass, "dsmr/meter-stats/electricity_tariff", "0")
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get(electricity_tariff).state == "high"
|
||||
|
||||
# Test low tariff
|
||||
async_fire_mqtt_message(hass, "dsmr/meter-stats/electricity_tariff", "1")
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get(electricity_tariff).state == "low"
|
||||
|
||||
|
||||
async def test_entity_dsmr_transform(hass: HomeAssistant, mqtt_mock: MqttMockHAClient):
|
||||
"""Test the state attribute of DSMRReaderSensorEntityDescription when a dsmr transform is needed."""
|
||||
config_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title=DOMAIN,
|
||||
options={},
|
||||
entry_id="TEST_ENTRY_ID",
|
||||
unique_id="UNIQUE_TEST_ID",
|
||||
)
|
||||
config_entry.add_to_hass(hass)
|
||||
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
# Create the entity, since it's not by default
|
||||
description = DSMRReaderSensorEntityDescription(
|
||||
key="dsmr/meter-stats/dsmr_version",
|
||||
name="version_test",
|
||||
state=dsmr_transform,
|
||||
)
|
||||
sensor = DSMRSensor(description, config_entry)
|
||||
sensor.hass = hass
|
||||
await sensor.async_added_to_hass()
|
||||
|
||||
# Test dsmr version, if it's a digit
|
||||
async_fire_mqtt_message(hass, "dsmr/meter-stats/dsmr_version", "42")
|
||||
await hass.async_block_till_done()
|
||||
|
||||
dsmr_version = "sensor.dsmr_meter_stats_dsmr_version"
|
||||
assert hass.states.get(dsmr_version).state == "4.2"
|
||||
|
||||
# Test dsmr version, if it's not a digit
|
||||
async_fire_mqtt_message(hass, "dsmr/meter-stats/dsmr_version", "version 5")
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert hass.states.get(dsmr_version).state == "version 5"
|
|
@ -0,0 +1,66 @@
|
|||
"""Tests for DSMR Reader sensor."""
|
||||
|
||||
from homeassistant.components.dsmr_reader.const import DOMAIN
|
||||
from homeassistant.components.dsmr_reader.definitions import (
|
||||
DSMRReaderSensorEntityDescription,
|
||||
)
|
||||
from homeassistant.components.dsmr_reader.sensor import DSMRSensor
|
||||
from homeassistant.const import STATE_UNKNOWN
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from tests.common import MockConfigEntry, async_fire_mqtt_message
|
||||
from tests.typing import MqttMockHAClient
|
||||
|
||||
|
||||
async def test_dsmr_sensor_mqtt(
|
||||
hass: HomeAssistant,
|
||||
mqtt_mock: MqttMockHAClient,
|
||||
) -> None:
|
||||
"""Test the DSMRSensor class, via an emluated MQTT message."""
|
||||
config_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title=DOMAIN,
|
||||
options={},
|
||||
entry_id="TEST_ENTRY_ID",
|
||||
unique_id="UNIQUE_TEST_ID",
|
||||
)
|
||||
config_entry.add_to_hass(hass)
|
||||
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
electricity_delivered_1 = "sensor.dsmr_reading_electricity_delivered_1"
|
||||
assert hass.states.get(electricity_delivered_1).state == STATE_UNKNOWN
|
||||
|
||||
electricity_delivered_2 = "sensor.dsmr_reading_electricity_delivered_2"
|
||||
assert hass.states.get(electricity_delivered_2).state == STATE_UNKNOWN
|
||||
|
||||
# Test if the payload is empty
|
||||
async_fire_mqtt_message(hass, "dsmr/reading/electricity_delivered_1", "")
|
||||
await hass.async_block_till_done()
|
||||
async_fire_mqtt_message(hass, "dsmr/reading/electricity_delivered_2", "")
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert hass.states.get(electricity_delivered_1).state == STATE_UNKNOWN
|
||||
assert hass.states.get(electricity_delivered_2).state == STATE_UNKNOWN
|
||||
|
||||
# Test if the payload is not empty
|
||||
async_fire_mqtt_message(hass, "dsmr/reading/electricity_delivered_1", "1050.39")
|
||||
await hass.async_block_till_done()
|
||||
async_fire_mqtt_message(hass, "dsmr/reading/electricity_delivered_2", "2001.12")
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert hass.states.get(electricity_delivered_1).state == "1050.39"
|
||||
assert hass.states.get(electricity_delivered_2).state == "2001.12"
|
||||
|
||||
# Create a test entity to ensure the entity_description.state is not None
|
||||
description = DSMRReaderSensorEntityDescription(
|
||||
key="DSMR_TEST_KEY",
|
||||
name="DSMR_TEST_NAME",
|
||||
state=lambda x: x,
|
||||
)
|
||||
sensor = DSMRSensor(description, config_entry)
|
||||
sensor.hass = hass
|
||||
await sensor.async_added_to_hass()
|
||||
async_fire_mqtt_message(hass, "DSMR_TEST_KEY", "192.8")
|
||||
await hass.async_block_till_done()
|
||||
assert sensor.native_value == "192.8"
|
Loading…
Reference in New Issue