Refactor Zeversolar init tests (#118551)

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
pull/113957/head^2
Christian Neumeier 2024-06-08 16:34:17 +02:00 committed by GitHub
parent 5166426d0a
commit a2504dafbc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 76 additions and 22 deletions

View File

@ -0,0 +1,47 @@
"""Define mocks and test objects."""
import pytest
from zeversolar import StatusEnum, ZeverSolarData
from homeassistant.components.zeversolar.const import DOMAIN
from homeassistant.const import CONF_HOST, CONF_PORT
from tests.common import MockConfigEntry
MOCK_HOST_ZEVERSOLAR = "zeversolar-fake-host"
MOCK_PORT_ZEVERSOLAR = 10200
@pytest.fixture
def config_entry() -> MockConfigEntry:
"""Create a mock config entry."""
return MockConfigEntry(
data={
CONF_HOST: MOCK_HOST_ZEVERSOLAR,
CONF_PORT: MOCK_PORT_ZEVERSOLAR,
},
domain=DOMAIN,
unique_id="my_id_2",
)
@pytest.fixture
def zeversolar_data() -> ZeverSolarData:
"""Create a ZeverSolarData structure for tests."""
return ZeverSolarData(
wifi_enabled=False,
serial_or_registry_id="1223",
registry_key="A-2",
hardware_version="M10",
software_version="123-23",
reported_datetime="19900101 23:00",
communication_status=StatusEnum.OK,
num_inverters=1,
serial_number="123456778",
pac=1234,
energy_today=123,
status=StatusEnum.OK,
meter_status=StatusEnum.OK,
)

View File

@ -1,32 +1,39 @@
"""Test the init file code."""
import pytest
from unittest.mock import patch
import homeassistant.components.zeversolar.__init__ as init
from homeassistant.components.zeversolar.const import DOMAIN
from homeassistant.const import CONF_HOST, CONF_PORT
from zeversolar import ZeverSolarData
from zeversolar.exceptions import ZeverSolarTimeout
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from tests.common import MockConfigEntry, MockModule, mock_integration
MOCK_HOST_ZEVERSOLAR = "zeversolar-fake-host"
MOCK_PORT_ZEVERSOLAR = 10200
from tests.common import MockConfigEntry
async def test_async_setup_entry_fails(hass: HomeAssistant) -> None:
"""Test the sensor setup."""
mock_integration(hass, MockModule(DOMAIN))
async def test_async_setup_entry_fails(
hass: HomeAssistant, config_entry: MockConfigEntry, zeversolar_data: ZeverSolarData
) -> None:
"""Test to load/unload the integration."""
config = MockConfigEntry(
data={
CONF_HOST: MOCK_HOST_ZEVERSOLAR,
CONF_PORT: MOCK_PORT_ZEVERSOLAR,
},
domain=DOMAIN,
)
config_entry.add_to_hass(hass)
config.add_to_hass(hass)
with (
patch("zeversolar.ZeverSolarClient.get_data", side_effect=ZeverSolarTimeout),
):
await hass.config_entries.async_setup(config_entry.entry_id)
assert config_entry.state is ConfigEntryState.SETUP_RETRY
with pytest.raises(ConfigEntryNotReady):
await init.async_setup_entry(hass, config)
with (
patch("homeassistant.components.zeversolar.PLATFORMS", []),
patch("zeversolar.ZeverSolarClient.get_data", return_value=zeversolar_data),
):
hass.config_entries.async_schedule_reload(config_entry.entry_id)
assert config_entry.state is ConfigEntryState.LOADED
with (
patch("homeassistant.components.zeversolar.PLATFORMS", []),
):
result = await hass.config_entries.async_unload(config_entry.entry_id)
assert result is True
assert config_entry.state is ConfigEntryState.NOT_LOADED