"""Tests for the AirGradient update platform.""" from datetime import timedelta from unittest.mock import AsyncMock, patch from freezegun.api import FrozenDateTimeFactory from syrupy import SnapshotAssertion from homeassistant.const import STATE_OFF, STATE_ON, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er from . import setup_integration from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform async def test_all_entities( hass: HomeAssistant, snapshot: SnapshotAssertion, mock_airgradient_client: AsyncMock, mock_config_entry: MockConfigEntry, entity_registry: er.EntityRegistry, ) -> None: """Test all entities.""" with patch("homeassistant.components.airgradient.PLATFORMS", [Platform.UPDATE]): await setup_integration(hass, mock_config_entry) await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id) async def test_update_mechanism( hass: HomeAssistant, mock_airgradient_client: AsyncMock, mock_config_entry: MockConfigEntry, freezer: FrozenDateTimeFactory, ) -> None: """Test update entity.""" await setup_integration(hass, mock_config_entry) state = hass.states.get("update.airgradient_firmware") assert state.state == STATE_ON assert state.attributes["installed_version"] == "3.1.1" assert state.attributes["latest_version"] == "3.1.4" mock_airgradient_client.get_latest_firmware_version.assert_called_once() mock_airgradient_client.get_latest_firmware_version.reset_mock() mock_airgradient_client.get_current_measures.return_value.firmware_version = "3.1.4" freezer.tick(timedelta(minutes=1)) async_fire_time_changed(hass) await hass.async_block_till_done() state = hass.states.get("update.airgradient_firmware") assert state.state == STATE_OFF assert state.attributes["installed_version"] == "3.1.4" assert state.attributes["latest_version"] == "3.1.4" mock_airgradient_client.get_latest_firmware_version.return_value = "3.1.5" freezer.tick(timedelta(minutes=59)) async_fire_time_changed(hass) await hass.async_block_till_done() mock_airgradient_client.get_latest_firmware_version.assert_called_once() state = hass.states.get("update.airgradient_firmware") assert state.state == STATE_ON assert state.attributes["installed_version"] == "3.1.4" assert state.attributes["latest_version"] == "3.1.5"