core/tests/components/discovergy/test_init.py

64 lines
1.8 KiB
Python

"""Test Discovergy component setup."""
from unittest.mock import AsyncMock
from pydiscovergy.error import DiscovergyClientError, HTTPError, InvalidLogin
import pytest
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
@pytest.mark.usefixtures("discovergy")
async def test_config_setup(
hass: HomeAssistant,
config_entry: MockConfigEntry,
) -> None:
"""Test for setup success."""
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
assert config_entry.state is ConfigEntryState.LOADED
@pytest.mark.parametrize(
("error", "expected_state"),
[
(InvalidLogin, ConfigEntryState.SETUP_ERROR),
(HTTPError, ConfigEntryState.SETUP_RETRY),
(DiscovergyClientError, ConfigEntryState.SETUP_RETRY),
(Exception, ConfigEntryState.SETUP_RETRY),
],
)
async def test_config_not_ready(
hass: HomeAssistant,
config_entry: MockConfigEntry,
discovergy: AsyncMock,
error: Exception,
expected_state: ConfigEntryState,
) -> None:
"""Test for setup failure."""
config_entry.add_to_hass(hass)
discovergy.meters.side_effect = error
await hass.config_entries.async_setup(config_entry.entry_id)
assert config_entry.state is expected_state
@pytest.mark.usefixtures("setup_integration")
async def test_reload_config_entry(
hass: HomeAssistant,
config_entry: MockConfigEntry,
) -> None:
"""Test config entry reload."""
new_data = {"email": "abc@example.com", "password": "password"}
assert config_entry.state is ConfigEntryState.LOADED
assert hass.config_entries.async_update_entry(config_entry, data=new_data)
assert config_entry.state is ConfigEntryState.LOADED
assert config_entry.data == new_data