diff --git a/tests/components/doorbird/__init__.py b/tests/components/doorbird/__init__.py index dc0f041ba31..c342fac20e9 100644 --- a/tests/components/doorbird/__init__.py +++ b/tests/components/doorbird/__init__.py @@ -39,6 +39,7 @@ def get_mock_doorbird_api( info: dict[str, Any] | None = None, info_side_effect: Exception | None = None, schedule: list[DoorBirdScheduleEntry] | None = None, + favorites_side_effect: Exception | None = None, ) -> DoorBird: """Return a mock DoorBirdAPI object with return values.""" doorbirdapi_mock = MagicMock(spec_set=DoorBird) @@ -46,7 +47,8 @@ def get_mock_doorbird_api( side_effect=info_side_effect, return_value=info ) type(doorbirdapi_mock).favorites = AsyncMock( - return_value={"http": {"x": {"value": "http://webhook"}}} + side_effect=favorites_side_effect, + return_value={"http": {"x": {"value": "http://webhook"}}}, ) type(doorbirdapi_mock).change_favorite = AsyncMock(return_value=True) type(doorbirdapi_mock).schedule = AsyncMock(return_value=schedule) diff --git a/tests/components/doorbird/conftest.py b/tests/components/doorbird/conftest.py index 98dbec18b4c..f98fcf0eac8 100644 --- a/tests/components/doorbird/conftest.py +++ b/tests/components/doorbird/conftest.py @@ -81,6 +81,7 @@ async def doorbird_mocker( info: dict[str, Any] | None = None, info_side_effect: Exception | None = None, schedule: list[DoorBirdScheduleEntry] | None = None, + favorites_side_effect: Exception | None = None, ) -> MockDoorbirdEntry: """Create a MockDoorbirdEntry from defaults or specific values.""" entry = entry or MockConfigEntry( @@ -93,6 +94,7 @@ async def doorbird_mocker( info=info or doorbird_info, info_side_effect=info_side_effect, schedule=schedule or doorbird_schedule, + favorites_side_effect=favorites_side_effect, ) entry.add_to_hass(hass) with patch_doorbird_api_entry_points(api): diff --git a/tests/components/doorbird/test_init.py b/tests/components/doorbird/test_init.py index 6bbf694dd7c..fb8bad2fb46 100644 --- a/tests/components/doorbird/test_init.py +++ b/tests/components/doorbird/test_init.py @@ -1,10 +1,12 @@ """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_unauthorized_exception +from . import mock_not_found_exception, mock_unauthorized_exception from .conftest import DoorbirdMockerType @@ -30,3 +32,52 @@ async def test_auth_fails( 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_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}" + )