diff --git a/tests/components/doorbird/__init__.py b/tests/components/doorbird/__init__.py index 20f0b0262d5..e71eacc1a42 100644 --- a/tests/components/doorbird/__init__.py +++ b/tests/components/doorbird/__init__.py @@ -31,9 +31,14 @@ def get_mock_doorbird_api( type(doorbirdapi_mock).info = AsyncMock( side_effect=info_side_effect, return_value=info ) - type(doorbirdapi_mock).favorites = AsyncMock(return_value={}) + type(doorbirdapi_mock).favorites = AsyncMock( + return_value={"http": {"x": {"value": "http://webhook"}}} + ) type(doorbirdapi_mock).change_favorite = AsyncMock(return_value=True) type(doorbirdapi_mock).schedule = AsyncMock(return_value=schedule) + type(doorbirdapi_mock).energize_relay = AsyncMock(return_value=True) + type(doorbirdapi_mock).turn_light_on = AsyncMock(return_value=True) + type(doorbirdapi_mock).delete_favorite = AsyncMock(return_value=True) type(doorbirdapi_mock).doorbell_state = AsyncMock( side_effect=mock_unauthorized_exception() ) diff --git a/tests/components/doorbird/test_button.py b/tests/components/doorbird/test_button.py new file mode 100644 index 00000000000..7d1f987017b --- /dev/null +++ b/tests/components/doorbird/test_button.py @@ -0,0 +1,55 @@ +"""Test DoorBird buttons.""" + +from collections.abc import Callable, Coroutine +from typing import Any + +from homeassistant.components.button import DOMAIN, SERVICE_PRESS +from homeassistant.const import ATTR_ENTITY_ID, STATE_UNKNOWN +from homeassistant.core import HomeAssistant + +from .conftest import MockDoorbirdEntry + + +async def test_relay_button( + hass: HomeAssistant, + doorbird_mocker: Callable[[], Coroutine[Any, Any, MockDoorbirdEntry]], +) -> None: + """Test pressing a relay button.""" + doorbird_entry = await doorbird_mocker() + relay_1_entity_id = "button.mydoorbird_relay_1" + assert hass.states.get(relay_1_entity_id).state == STATE_UNKNOWN + await hass.services.async_call( + DOMAIN, SERVICE_PRESS, {ATTR_ENTITY_ID: relay_1_entity_id}, blocking=True + ) + assert hass.states.get(relay_1_entity_id).state != STATE_UNKNOWN + assert doorbird_entry.api.energize_relay.call_count == 1 + + +async def test_ir_button( + hass: HomeAssistant, + doorbird_mocker: Callable[[], Coroutine[Any, Any, MockDoorbirdEntry]], +) -> None: + """Test pressing the IR button.""" + doorbird_entry = await doorbird_mocker() + ir_entity_id = "button.mydoorbird_ir" + assert hass.states.get(ir_entity_id).state == STATE_UNKNOWN + await hass.services.async_call( + DOMAIN, SERVICE_PRESS, {ATTR_ENTITY_ID: ir_entity_id}, blocking=True + ) + assert hass.states.get(ir_entity_id).state != STATE_UNKNOWN + assert doorbird_entry.api.turn_light_on.call_count == 1 + + +async def test_reset_favorites_button( + hass: HomeAssistant, + doorbird_mocker: Callable[[], Coroutine[Any, Any, MockDoorbirdEntry]], +) -> None: + """Test pressing the reset favorites button.""" + doorbird_entry = await doorbird_mocker() + reset_entity_id = "button.mydoorbird_reset_favorites" + assert hass.states.get(reset_entity_id).state == STATE_UNKNOWN + await hass.services.async_call( + DOMAIN, SERVICE_PRESS, {ATTR_ENTITY_ID: reset_entity_id}, blocking=True + ) + assert hass.states.get(reset_entity_id).state != STATE_UNKNOWN + assert doorbird_entry.api.delete_favorite.call_count == 1