mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
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 improving
This commit is contained in:
parent
98710e6c91
commit
fb95b91507
@ -256,9 +256,6 @@ omit =
|
|||||||
homeassistant/components/dormakaba_dkey/sensor.py
|
homeassistant/components/dormakaba_dkey/sensor.py
|
||||||
homeassistant/components/dovado/*
|
homeassistant/components/dovado/*
|
||||||
homeassistant/components/downloader/__init__.py
|
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/dte_energy_bridge/sensor.py
|
||||||
homeassistant/components/dublin_bus_transport/sensor.py
|
homeassistant/components/dublin_bus_transport/sensor.py
|
||||||
homeassistant/components/dunehd/__init__.py
|
homeassistant/components/dunehd/__init__.py
|
||||||
|
@ -342,8 +342,8 @@ build.json @home-assistant/supervisor
|
|||||||
/tests/components/drop_connect/ @ChandlerSystems @pfrazer
|
/tests/components/drop_connect/ @ChandlerSystems @pfrazer
|
||||||
/homeassistant/components/dsmr/ @Robbie1221 @frenck
|
/homeassistant/components/dsmr/ @Robbie1221 @frenck
|
||||||
/tests/components/dsmr/ @Robbie1221 @frenck
|
/tests/components/dsmr/ @Robbie1221 @frenck
|
||||||
/homeassistant/components/dsmr_reader/ @sorted-bits @glodenox
|
/homeassistant/components/dsmr_reader/ @sorted-bits @glodenox @erwindouna
|
||||||
/tests/components/dsmr_reader/ @sorted-bits @glodenox
|
/tests/components/dsmr_reader/ @sorted-bits @glodenox @erwindouna
|
||||||
/homeassistant/components/duotecno/ @cereal2nd
|
/homeassistant/components/duotecno/ @cereal2nd
|
||||||
/tests/components/duotecno/ @cereal2nd
|
/tests/components/duotecno/ @cereal2nd
|
||||||
/homeassistant/components/dwd_weather_warnings/ @runningman84 @stephan192 @andarotajo
|
/homeassistant/components/dwd_weather_warnings/ @runningman84 @stephan192 @andarotajo
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"domain": "dsmr_reader",
|
"domain": "dsmr_reader",
|
||||||
"name": "DSMR Reader",
|
"name": "DSMR Reader",
|
||||||
"codeowners": ["@sorted-bits", "@glodenox"],
|
"codeowners": ["@sorted-bits", "@glodenox", "@erwindouna"],
|
||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"dependencies": ["mqtt"],
|
"dependencies": ["mqtt"],
|
||||||
"documentation": "https://www.home-assistant.io/integrations/dsmr_reader",
|
"documentation": "https://www.home-assistant.io/integrations/dsmr_reader",
|
||||||
|
111
tests/components/dsmr_reader/test_definitions.py
Normal file
111
tests/components/dsmr_reader/test_definitions.py
Normal file
@ -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"
|
66
tests/components/dsmr_reader/test_sensor.py
Normal file
66
tests/components/dsmr_reader/test_sensor.py
Normal file
@ -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…
x
Reference in New Issue
Block a user