Files

110 lines
3.4 KiB
Python

"""Test the Aquacell init module."""
import time
from unittest.mock import AsyncMock
from aioaquacell import AquacellApiException, AuthenticationFailed
from freezegun.api import FrozenDateTimeFactory
import pytest
from homeassistant.components.aquacell.const import (
CONF_REFRESH_TOKEN,
CONF_REFRESH_TOKEN_CREATION_TIME,
DOMAIN,
)
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from . import setup_integration
from tests.common import MockConfigEntry
async def test_load_unload_entry(
hass: HomeAssistant,
mock_aquacell_api: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test load and unload entry."""
await setup_integration(hass, mock_config_entry)
entry = hass.config_entries.async_entries(DOMAIN)[0]
assert entry.state is ConfigEntryState.LOADED
await hass.config_entries.async_remove(entry.entry_id)
await hass.async_block_till_done()
assert entry.state is ConfigEntryState.NOT_LOADED
async def test_load_withoutbrand(
hass: HomeAssistant,
mock_aquacell_api: AsyncMock,
mock_config_entry_without_brand: MockConfigEntry,
) -> None:
"""Test load entry without brand."""
await setup_integration(hass, mock_config_entry_without_brand)
assert mock_config_entry_without_brand.state is ConfigEntryState.LOADED
async def test_coordinator_update_valid_refresh_token(
hass: HomeAssistant,
mock_aquacell_api: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test load and unload entry."""
await setup_integration(hass, mock_config_entry)
entry = hass.config_entries.async_entries(DOMAIN)[0]
assert entry.state is ConfigEntryState.LOADED
assert len(mock_aquacell_api.authenticate.mock_calls) == 0
assert len(mock_aquacell_api.authenticate_refresh.mock_calls) == 1
assert len(mock_aquacell_api.get_all_softeners.mock_calls) == 1
async def test_coordinator_update_expired_refresh_token(
hass: HomeAssistant,
freezer: FrozenDateTimeFactory,
mock_aquacell_api: AsyncMock,
mock_config_entry_expired: MockConfigEntry,
) -> None:
"""Test load and unload entry."""
mock_aquacell_api.authenticate.return_value = "new-refresh-token"
await setup_integration(hass, mock_config_entry_expired)
entry = hass.config_entries.async_entries(DOMAIN)[0]
assert entry.state is ConfigEntryState.LOADED
assert len(mock_aquacell_api.authenticate.mock_calls) == 1
assert len(mock_aquacell_api.authenticate_refresh.mock_calls) == 0
assert len(mock_aquacell_api.get_all_softeners.mock_calls) == 1
assert entry.data[CONF_REFRESH_TOKEN] == "new-refresh-token"
assert entry.data[CONF_REFRESH_TOKEN_CREATION_TIME] == time.time()
@pytest.mark.parametrize(
("exception", "expected_state"),
[
(AuthenticationFailed, ConfigEntryState.SETUP_ERROR),
(AquacellApiException, ConfigEntryState.SETUP_RETRY),
],
)
async def test_load_exceptions(
hass: HomeAssistant,
mock_aquacell_api: AsyncMock,
mock_config_entry: MockConfigEntry,
exception: Exception,
expected_state: ConfigEntryState,
) -> None:
"""Test load and unload entry."""
mock_aquacell_api.authenticate_refresh.side_effect = exception
await setup_integration(hass, mock_config_entry)
entry = hass.config_entries.async_entries(DOMAIN)[0]
assert entry.state is expected_state