forked from home-assistant/core
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add DSMR Reader tests (home-assistant#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
- Loading branch information
1 parent
98710e6
commit fb95b91
Showing
5 changed files
with
180 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Validating CODEOWNERS rules …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |