Files
core/tests/components/namecheapdns/test_init.py

81 lines
2.3 KiB
Python

"""Test the NamecheapDNS component."""
from datetime import timedelta
from aiohttp import ClientError
from freezegun.api import FrozenDateTimeFactory
import pytest
from homeassistant.components.namecheapdns.const import UPDATE_URL
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from .conftest import TEST_USER_INPUT
from tests.common import MockConfigEntry, async_fire_time_changed
from tests.test_util.aiohttp import AiohttpClientMocker
@pytest.mark.freeze_time
async def test_setup(
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
config_entry: MockConfigEntry,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test setup works if update passes."""
aioclient_mock.get(
UPDATE_URL,
params=TEST_USER_INPUT,
text="<interface-response><ErrCount>0</ErrCount></interface-response>",
)
config_entry.add_to_hass(hass)
assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.LOADED
assert aioclient_mock.call_count == 1
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert aioclient_mock.call_count == 2
@pytest.mark.freeze_time
async def test_setup_fails_if_update_fails(
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
config_entry: MockConfigEntry,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test setup fails if first update fails."""
aioclient_mock.get(
UPDATE_URL,
params=TEST_USER_INPUT,
text="<interface-response><ErrCount>1</ErrCount></interface-response>",
)
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.SETUP_RETRY
assert aioclient_mock.call_count == 1
aioclient_mock.clear_requests()
aioclient_mock.get(
UPDATE_URL,
params=TEST_USER_INPUT,
exc=ClientError,
)
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.SETUP_RETRY
assert aioclient_mock.call_count == 1