Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 29 additions & 14 deletions tests/components/modbus/conftest.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
"""The tests for the Modbus sensor component."""
from datetime import timedelta
import logging
from unittest import mock

Expand Down Expand Up @@ -40,20 +39,17 @@ def __init__(self, register_words):
self.bits = register_words


async def run_base_test(
async def setup_base_test(
sensor_name,
hass,
use_mock_hub,
data_array,
register_type,
entity_domain,
register_words,
expected,
scan_interval,
):
"""Run test for given config."""
"""Run setup device for given config."""

# Full sensor configuration
scan_interval = 5
config = {
entity_domain: {
CONF_PLATFORM: "modbus",
Expand All @@ -62,6 +58,28 @@ async def run_base_test(
}
}

# Initialize sensor
now = dt_util.utcnow()
with mock.patch("homeassistant.helpers.event.dt_util.utcnow", return_value=now):
assert await async_setup_component(hass, entity_domain, config)
await hass.async_block_till_done()

entity_id = f"{entity_domain}.{sensor_name}"
device = hass.states.get(entity_id)
return entity_id, now, device


async def run_base_read_test(
entity_id,
hass,
use_mock_hub,
register_type,
register_words,
expected,
now,
):
"""Run test for given config."""

# Setup inputs for the sensor
read_result = ReadResult(register_words)
if register_type == CALL_TYPE_COIL:
Expand All @@ -73,14 +91,11 @@ async def run_base_test(
else: # CALL_TYPE_REGISTER_HOLDING
use_mock_hub.read_holding_registers.return_value = read_result

# Initialize sensor
now = dt_util.utcnow()
with mock.patch("homeassistant.helpers.event.dt_util.utcnow", return_value=now):
assert await async_setup_component(hass, entity_domain, config)
await hass.async_block_till_done()

# Trigger update call with time_changed event
now += timedelta(seconds=scan_interval + 1)
with mock.patch("homeassistant.helpers.event.dt_util.utcnow", return_value=now):
async_fire_time_changed(hass, now)
await hass.async_block_till_done()

# Check state
state = hass.states.get(entity_id).state
assert state == expected
32 changes: 17 additions & 15 deletions tests/components/modbus/test_modbus_binary_sensor.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""The tests for the Modbus sensor component."""
from datetime import timedelta
import logging

from homeassistant.components.binary_sensor import DOMAIN as SENSOR_DOMAIN
Expand All @@ -11,36 +12,37 @@
)
from homeassistant.const import CONF_NAME, STATE_OFF, STATE_ON

from .conftest import run_base_test
from .conftest import run_base_read_test, setup_base_test

_LOGGER = logging.getLogger(__name__)


async def run_sensor_test(hass, use_mock_hub, register_config, value, expected):
"""Run test for given config."""
sensor_name = "modbus_test_binary_sensor"
entity_domain = SENSOR_DOMAIN
data_array = {
CONF_INPUTS: [
dict(**{CONF_NAME: sensor_name, CONF_ADDRESS: 1234}, **register_config)
]
}
await run_base_test(
scan_interval = 5
entity_id, now, device = await setup_base_test(
sensor_name,
hass,
use_mock_hub,
data_array,
{
CONF_INPUTS: [
dict(**{CONF_NAME: sensor_name, CONF_ADDRESS: 1234}, **register_config)
]
},
SENSOR_DOMAIN,
scan_interval,
)
await run_base_read_test(
entity_id,
hass,
use_mock_hub,
register_config.get(CONF_INPUT_TYPE),
entity_domain,
value,
expected,
now + timedelta(seconds=scan_interval + 1),
)

# Check state
entity_id = f"{entity_domain}.{sensor_name}"
state = hass.states.get(entity_id).state
assert state == expected


async def test_coil_true(hass, mock_hub):
"""Test conversion of single word register."""
Expand Down
Loading