mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 03:37:07 +00:00
Complete coverage for doorbird init (#122272)
This commit is contained in:
parent
d421525f1b
commit
bd97a09cae
@ -39,6 +39,7 @@ def get_mock_doorbird_api(
|
|||||||
info: dict[str, Any] | None = None,
|
info: dict[str, Any] | None = None,
|
||||||
info_side_effect: Exception | None = None,
|
info_side_effect: Exception | None = None,
|
||||||
schedule: list[DoorBirdScheduleEntry] | None = None,
|
schedule: list[DoorBirdScheduleEntry] | None = None,
|
||||||
|
favorites_side_effect: Exception | None = None,
|
||||||
) -> DoorBird:
|
) -> DoorBird:
|
||||||
"""Return a mock DoorBirdAPI object with return values."""
|
"""Return a mock DoorBirdAPI object with return values."""
|
||||||
doorbirdapi_mock = MagicMock(spec_set=DoorBird)
|
doorbirdapi_mock = MagicMock(spec_set=DoorBird)
|
||||||
@ -46,7 +47,8 @@ def get_mock_doorbird_api(
|
|||||||
side_effect=info_side_effect, return_value=info
|
side_effect=info_side_effect, return_value=info
|
||||||
)
|
)
|
||||||
type(doorbirdapi_mock).favorites = AsyncMock(
|
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).change_favorite = AsyncMock(return_value=True)
|
||||||
type(doorbirdapi_mock).schedule = AsyncMock(return_value=schedule)
|
type(doorbirdapi_mock).schedule = AsyncMock(return_value=schedule)
|
||||||
|
@ -81,6 +81,7 @@ async def doorbird_mocker(
|
|||||||
info: dict[str, Any] | None = None,
|
info: dict[str, Any] | None = None,
|
||||||
info_side_effect: Exception | None = None,
|
info_side_effect: Exception | None = None,
|
||||||
schedule: list[DoorBirdScheduleEntry] | None = None,
|
schedule: list[DoorBirdScheduleEntry] | None = None,
|
||||||
|
favorites_side_effect: Exception | None = None,
|
||||||
) -> MockDoorbirdEntry:
|
) -> MockDoorbirdEntry:
|
||||||
"""Create a MockDoorbirdEntry from defaults or specific values."""
|
"""Create a MockDoorbirdEntry from defaults or specific values."""
|
||||||
entry = entry or MockConfigEntry(
|
entry = entry or MockConfigEntry(
|
||||||
@ -93,6 +94,7 @@ async def doorbird_mocker(
|
|||||||
info=info or doorbird_info,
|
info=info or doorbird_info,
|
||||||
info_side_effect=info_side_effect,
|
info_side_effect=info_side_effect,
|
||||||
schedule=schedule or doorbird_schedule,
|
schedule=schedule or doorbird_schedule,
|
||||||
|
favorites_side_effect=favorites_side_effect,
|
||||||
)
|
)
|
||||||
entry.add_to_hass(hass)
|
entry.add_to_hass(hass)
|
||||||
with patch_doorbird_api_entry_points(api):
|
with patch_doorbird_api_entry_points(api):
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
"""Test DoorBird init."""
|
"""Test DoorBird init."""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.doorbird.const import DOMAIN
|
from homeassistant.components.doorbird.const import DOMAIN
|
||||||
from homeassistant.config_entries import ConfigEntryState
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from . import mock_unauthorized_exception
|
from . import mock_not_found_exception, mock_unauthorized_exception
|
||||||
from .conftest import DoorbirdMockerType
|
from .conftest import DoorbirdMockerType
|
||||||
|
|
||||||
|
|
||||||
@ -30,3 +32,52 @@ async def test_auth_fails(
|
|||||||
flows = hass.config_entries.flow.async_progress(DOMAIN)
|
flows = hass.config_entries.flow.async_progress(DOMAIN)
|
||||||
assert len(flows) == 1
|
assert len(flows) == 1
|
||||||
assert flows[0]["step_id"] == "reauth_confirm"
|
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}"
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user