"""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="0", ) 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="1", ) 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