core/tests/components/ourgroceries/test_init.py

52 lines
1.6 KiB
Python
Raw Normal View History

"""Unit tests for the OurGroceries integration."""
from unittest.mock import AsyncMock
import pytest
from homeassistant.components.ourgroceries import ClientError, InvalidLoginException
from homeassistant.components.ourgroceries.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
async def test_load_unload(
hass: HomeAssistant,
setup_integration: None,
ourgroceries_config_entry: MockConfigEntry | None,
) -> None:
"""Test loading and unloading of the config entry."""
entries = hass.config_entries.async_entries(DOMAIN)
assert len(entries) == 1
assert ourgroceries_config_entry.state == ConfigEntryState.LOADED
assert await hass.config_entries.async_unload(ourgroceries_config_entry.entry_id)
assert ourgroceries_config_entry.state == ConfigEntryState.NOT_LOADED
@pytest.fixture
def login_with_error(exception, ourgroceries: AsyncMock):
"""Fixture to simulate error on login."""
ourgroceries.login.side_effect = (exception,)
@pytest.mark.parametrize(
("exception", "status"),
[
(InvalidLoginException, ConfigEntryState.SETUP_ERROR),
(ClientError, ConfigEntryState.SETUP_RETRY),
(TimeoutError, ConfigEntryState.SETUP_RETRY),
],
)
async def test_init_failure(
hass: HomeAssistant,
login_with_error,
setup_integration: None,
status: ConfigEntryState,
ourgroceries_config_entry: MockConfigEntry | None,
) -> None:
"""Test an initialization error on integration load."""
assert ourgroceries_config_entry.state == status