core/tests/components/doorbird/test_init.py

94 lines
3.0 KiB
Python

"""Test DoorBird init."""
import pytest
from homeassistant.components.doorbird.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from . import mock_not_found_exception, mock_unauthorized_exception
from .conftest import DoorbirdMockerType
async def test_basic_setup(
doorbird_mocker: DoorbirdMockerType,
) -> None:
"""Test basic setup."""
doorbird_entry = await doorbird_mocker()
entry = doorbird_entry.entry
assert entry.state is ConfigEntryState.LOADED
async def test_auth_fails(
hass: HomeAssistant,
doorbird_mocker: DoorbirdMockerType,
) -> None:
"""Test basic setup with an auth failure."""
doorbird_entry = await doorbird_mocker(
info_side_effect=mock_unauthorized_exception()
)
entry = doorbird_entry.entry
assert entry.state is ConfigEntryState.SETUP_ERROR
flows = hass.config_entries.flow.async_progress(DOMAIN)
assert len(flows) == 1
assert flows[0]["step_id"] == "reauth_confirm"
@pytest.mark.parametrize(
"side_effect",
[OSError, mock_not_found_exception()],
)
async def test_http_info_request_fails(
doorbird_mocker: DoorbirdMockerType, side_effect: Exception
) -> None:
"""Test basic setup with an http failure."""
doorbird_entry = await doorbird_mocker(info_side_effect=side_effect)
assert doorbird_entry.entry.state is ConfigEntryState.SETUP_RETRY
async def test_http_favorites_request_fails(
doorbird_mocker: DoorbirdMockerType,
) -> None:
"""Test basic setup with an http failure."""
doorbird_entry = await doorbird_mocker(
favorites_side_effect=mock_not_found_exception()
)
assert doorbird_entry.entry.state is ConfigEntryState.SETUP_RETRY
async def test_http_schedule_api_missing(
doorbird_mocker: DoorbirdMockerType,
) -> None:
"""Test missing the schedule API is non-fatal as not all models support it."""
doorbird_entry = await doorbird_mocker(
schedule_side_effect=mock_not_found_exception()
)
assert doorbird_entry.entry.state is ConfigEntryState.LOADED
async def test_events_changed(
hass: HomeAssistant,
doorbird_mocker: DoorbirdMockerType,
) -> None:
"""Test basic setup."""
doorbird_entry = await doorbird_mocker()
entry = doorbird_entry.entry
assert entry.state is ConfigEntryState.LOADED
api = doorbird_entry.api
api.favorites.reset_mock()
api.change_favorite.reset_mock()
api.schedule.reset_mock()
hass.config_entries.async_update_entry(entry, options={"events": ["xyz"]})
await hass.async_block_till_done()
assert len(api.favorites.mock_calls) == 2
assert len(api.schedule.mock_calls) == 1
assert len(api.change_favorite.mock_calls) == 1
favorite_type, title, url = api.change_favorite.mock_calls[0][1]
assert favorite_type == "http"
assert title == "Home Assistant (mydoorbird_xyz)"
assert url == (
f"http://10.10.10.10:8123/api/doorbird/mydoorbird_xyz?token={entry.entry_id}"
)