"""Tests for the AEMET OpenData integration.""" from typing import Any from unittest.mock import patch from aemet_opendata.const import ATTR_DATA from homeassistant.components.aemet.const import DOMAIN from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry, load_json_value_fixture FORECAST_DAILY_DATA_MOCK = { ATTR_DATA: load_json_value_fixture("aemet/town-28065-forecast-daily-data.json"), } FORECAST_HOURLY_DATA_MOCK = { ATTR_DATA: load_json_value_fixture("aemet/town-28065-forecast-hourly-data.json"), } STATION_DATA_MOCK = { ATTR_DATA: load_json_value_fixture("aemet/station-3195-data.json"), } STATIONS_DATA_MOCK = { ATTR_DATA: load_json_value_fixture("aemet/station-list-data.json"), } TOWN_DATA_MOCK = { ATTR_DATA: load_json_value_fixture("aemet/town-id28065.json"), } TOWNS_DATA_MOCK = { ATTR_DATA: load_json_value_fixture("aemet/town-list.json"), } def mock_api_call(cmd: str, fetch_data: bool = False) -> dict[str, Any]: """Mock AEMET OpenData API calls.""" if cmd == "maestro/municipio/id28065": return TOWN_DATA_MOCK if cmd == "maestro/municipios": return TOWNS_DATA_MOCK if ( cmd == "observacion/convencional/datos/estacion/3195" # codespell:ignore convencional ): return STATION_DATA_MOCK if cmd == "observacion/convencional/todas": # codespell:ignore convencional return STATIONS_DATA_MOCK if cmd == "prediccion/especifica/municipio/diaria/28065": return FORECAST_DAILY_DATA_MOCK if cmd == "prediccion/especifica/municipio/horaria/28065": return FORECAST_HOURLY_DATA_MOCK return {} async def async_init_integration(hass: HomeAssistant): """Set up the AEMET OpenData integration in Home Assistant.""" config_entry = MockConfigEntry( domain=DOMAIN, data={ CONF_API_KEY: "api-key", CONF_LATITUDE: "40.30403754", CONF_LONGITUDE: "-3.72935236", CONF_NAME: "AEMET", }, entry_id="7442b231f139e813fc1939281123f220", unique_id="40.30403754--3.72935236", ) config_entry.add_to_hass(hass) with patch( "homeassistant.components.aemet.AEMET.api_call", side_effect=mock_api_call, ): await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done()