"""Fixtures for National Weather Service tests.""" import asyncio from unittest.mock import AsyncMock, patch import pytest from .const import DEFAULT_FORECAST, DEFAULT_OBSERVATION @pytest.fixture def mock_simple_nws(): """Mock pynws SimpleNWS with default values.""" # set RETRY_STOP and RETRY_INTERVAL to avoid retries inside pynws in tests with ( patch("homeassistant.components.nws.SimpleNWS") as mock_nws, patch("homeassistant.components.nws.coordinator.RETRY_STOP", 0), patch("homeassistant.components.nws.coordinator.RETRY_INTERVAL", 0), ): instance = mock_nws.return_value instance.set_station = AsyncMock(return_value=None) instance.update_observation = AsyncMock(return_value=None) instance.update_forecast = AsyncMock(return_value=None) instance.update_forecast_hourly = AsyncMock(return_value=None) instance.station = "ABC" instance.stations = ["ABC"] instance.observation = DEFAULT_OBSERVATION instance.forecast = DEFAULT_FORECAST instance.forecast_hourly = DEFAULT_FORECAST yield mock_nws @pytest.fixture def mock_simple_nws_times_out(): """Mock pynws SimpleNWS that times out.""" # set RETRY_STOP and RETRY_INTERVAL to avoid retries inside pynws in tests with ( patch("homeassistant.components.nws.SimpleNWS") as mock_nws, patch("homeassistant.components.nws.coordinator.RETRY_STOP", 0), patch("homeassistant.components.nws.coordinator.RETRY_INTERVAL", 0), ): instance = mock_nws.return_value instance.set_station = AsyncMock(side_effect=asyncio.TimeoutError) instance.update_observation = AsyncMock(side_effect=asyncio.TimeoutError) instance.update_forecast = AsyncMock(side_effect=asyncio.TimeoutError) instance.update_forecast_hourly = AsyncMock(side_effect=asyncio.TimeoutError) instance.station = "ABC" instance.stations = ["ABC"] instance.observation = None instance.forecast = None instance.forecast_hourly = None yield mock_nws @pytest.fixture def mock_simple_nws_config(): """Mock pynws SimpleNWS with default values in config_flow.""" with patch("homeassistant.components.nws.config_flow.SimpleNWS") as mock_nws: instance = mock_nws.return_value instance.set_station = AsyncMock(return_value=None) instance.station = "ABC" instance.stations = ["ABC"] yield mock_nws @pytest.fixture def no_sensor(): """Remove sensors.""" with patch( "homeassistant.components.nws.sensor.async_setup_entry", return_value=True ) as mock_setup_entry: yield mock_setup_entry @pytest.fixture def no_weather(): """Remove weather.""" with patch( "homeassistant.components.nws.weather.async_setup_entry", return_value=True ) as mock_setup_entry: yield mock_setup_entry