"""Test the UniFi Protect button platform.""" # pylint: disable=protected-access from __future__ import annotations from unittest.mock import AsyncMock import pytest from pyunifiprotect.data.devices import Chime from homeassistant.components.unifiprotect.const import DEFAULT_ATTRIBUTION from homeassistant.const import ATTR_ATTRIBUTION, ATTR_ENTITY_ID, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er from .conftest import MockEntityFixture, assert_entity_counts, enable_entity @pytest.fixture(name="chime") async def chime_fixture( hass: HomeAssistant, mock_entry: MockEntityFixture, mock_chime: Chime ): """Fixture for a single camera for testing the button platform.""" chime_obj = mock_chime.copy(deep=True) chime_obj._api = mock_entry.api chime_obj.name = "Test Chime" mock_entry.api.bootstrap.chimes = { chime_obj.id: chime_obj, } await hass.config_entries.async_setup(mock_entry.entry.entry_id) await hass.async_block_till_done() assert_entity_counts(hass, Platform.BUTTON, 3, 2) return chime_obj async def test_reboot_button( hass: HomeAssistant, mock_entry: MockEntityFixture, chime: Chime, ): """Test button entity.""" mock_entry.api.reboot_device = AsyncMock() unique_id = f"{chime.id}_reboot" entity_id = "button.test_chime_reboot_device" entity_registry = er.async_get(hass) entity = entity_registry.async_get(entity_id) assert entity assert entity.disabled assert entity.unique_id == unique_id await enable_entity(hass, mock_entry.entry.entry_id, entity_id) state = hass.states.get(entity_id) assert state assert state.attributes[ATTR_ATTRIBUTION] == DEFAULT_ATTRIBUTION await hass.services.async_call( "button", "press", {ATTR_ENTITY_ID: entity_id}, blocking=True ) mock_entry.api.reboot_device.assert_called_once() async def test_chime_button( hass: HomeAssistant, mock_entry: MockEntityFixture, chime: Chime, ): """Test button entity.""" mock_entry.api.play_speaker = AsyncMock() unique_id = f"{chime.id}_play" entity_id = "button.test_chime_play_chime" entity_registry = er.async_get(hass) entity = entity_registry.async_get(entity_id) assert entity assert not entity.disabled assert entity.unique_id == unique_id state = hass.states.get(entity_id) assert state assert state.attributes[ATTR_ATTRIBUTION] == DEFAULT_ATTRIBUTION await hass.services.async_call( "button", "press", {ATTR_ENTITY_ID: entity_id}, blocking=True ) mock_entry.api.play_speaker.assert_called_once()