From a2504dafbcc96a57e30d325a7c2b19c0ed48238e Mon Sep 17 00:00:00 2001 From: Christian Neumeier <47736781+NECH2004@users.noreply.github.com> Date: Sat, 8 Jun 2024 16:34:17 +0200 Subject: [PATCH] Refactor Zeversolar init tests (#118551) Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> --- tests/components/zeversolar/conftest.py | 47 ++++++++++++++++++++++ tests/components/zeversolar/test_init.py | 51 ++++++++++++++---------- 2 files changed, 76 insertions(+), 22 deletions(-) create mode 100644 tests/components/zeversolar/conftest.py diff --git a/tests/components/zeversolar/conftest.py b/tests/components/zeversolar/conftest.py new file mode 100644 index 00000000000..55d84f50a1b --- /dev/null +++ b/tests/components/zeversolar/conftest.py @@ -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, + ) diff --git a/tests/components/zeversolar/test_init.py b/tests/components/zeversolar/test_init.py index 56d06db414c..3eee530a9a2 100644 --- a/tests/components/zeversolar/test_init.py +++ b/tests/components/zeversolar/test_init.py @@ -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