"""The tests for Netatmo button.""" from unittest.mock import AsyncMock, patch import pytest from syrupy import SnapshotAssertion from homeassistant.components.button import DOMAIN as BUTTON_DOMAIN, SERVICE_PRESS from homeassistant.const import ATTR_ENTITY_ID, STATE_UNKNOWN, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er from .common import selected_platforms, snapshot_platform_entities from tests.common import MockConfigEntry @pytest.mark.usefixtures("entity_registry_enabled_by_default") async def test_entity( hass: HomeAssistant, config_entry: MockConfigEntry, netatmo_auth: AsyncMock, snapshot: SnapshotAssertion, entity_registry: er.EntityRegistry, ) -> None: """Test entities.""" await snapshot_platform_entities( hass, config_entry, Platform.BUTTON, entity_registry, snapshot, ) @pytest.mark.usefixtures("entity_registry_enabled_by_default") async def test_button_setup_and_services( hass: HomeAssistant, config_entry: MockConfigEntry, netatmo_auth: AsyncMock ) -> None: """Test setup and services.""" with selected_platforms([Platform.BUTTON]): assert await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() button_entity = "button.entrance_blinds_preferred_position" assert hass.states.get(button_entity).state == STATE_UNKNOWN # Test button press with patch("pyatmo.home.Home.async_set_state") as mock_set_state: await hass.services.async_call( BUTTON_DOMAIN, SERVICE_PRESS, {ATTR_ENTITY_ID: button_entity}, blocking=True, ) await hass.async_block_till_done() mock_set_state.assert_called_once_with( { "modules": [ { "id": "0009999992", "target_position": -2, "bridge": "12:34:56:30:d5:d4", } ] } ) assert (state := hass.states.get(button_entity)) assert state.state != STATE_UNKNOWN