Files

44 lines
1.4 KiB
Python

"""Fixtures for the Fronius integration tests."""
from collections.abc import Generator
from unittest.mock import MagicMock, patch
from modbus_connection import ModbusConnectionError
from modbus_connection.mock import MockModbusConnection
import pytest
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
@pytest.fixture(autouse=True)
def mock_modbus_unavailable(
mock_modbus_connection: MockModbusConnection,
) -> Generator[MagicMock]:
"""Refuse every Modbus request by default so tests run HTTP-only."""
def _refusing_unit(
hass: HomeAssistant, entry: ConfigEntry, params: object, unit_id: int
) -> object:
unit = mock_modbus_connection.for_unit(unit_id)
unit.fail_requests(ModbusConnectionError("Modbus disabled in tests"))
return unit
with patch(
"homeassistant.components.fronius.async_get_unit",
MagicMock(side_effect=_refusing_unit),
) as mock_get_unit:
yield mock_get_unit
@pytest.fixture
def mock_fronius_modbus(
mock_modbus_unavailable: MagicMock,
mock_modbus_connection: MockModbusConnection,
) -> MockModbusConnection:
"""Answer Modbus requests from the mock connection."""
mock_modbus_unavailable.side_effect = lambda hass, entry, params, unit_id: (
mock_modbus_connection.for_unit(unit_id)
)
return mock_modbus_connection