From f25da4611db5a2f199daff308f0935441313e81b Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 31 Mar 2024 10:48:43 -1000 Subject: [PATCH 1/2] Fix missing mocking in nextdns tests extracted from #114539 --- tests/components/nextdns/__init__.py | 28 +++++++++++------- .../components/nextdns/test_binary_sensor.py | 11 +++---- tests/components/nextdns/test_sensor.py | 29 +++---------------- tests/components/nextdns/test_switch.py | 11 +++---- 4 files changed, 30 insertions(+), 49 deletions(-) diff --git a/tests/components/nextdns/__init__.py b/tests/components/nextdns/__init__.py index e4948a9358f5c..0cf99ba3e0292 100644 --- a/tests/components/nextdns/__init__.py +++ b/tests/components/nextdns/__init__.py @@ -1,5 +1,6 @@ """Tests for the NextDNS integration.""" +from contextlib import contextmanager from unittest.mock import patch from nextdns import ( @@ -113,16 +114,9 @@ ) -async def init_integration(hass: HomeAssistant) -> MockConfigEntry: - """Set up the NextDNS integration in Home Assistant.""" - entry = MockConfigEntry( - domain=DOMAIN, - title="Fake Profile", - unique_id="xyz12", - data={CONF_API_KEY: "fake_api_key", CONF_PROFILE_ID: "xyz12"}, - entry_id="d9aa37407ddac7b964a99e86312288d6", - ) - +@contextmanager +def mock_nextdns(): + """Mock the NextDNS class.""" with ( patch( "homeassistant.components.nextdns.NextDns.get_profiles", @@ -157,6 +151,20 @@ async def init_integration(hass: HomeAssistant) -> MockConfigEntry: return_value=CONNECTION_STATUS, ), ): + yield + + +async def init_integration(hass: HomeAssistant) -> MockConfigEntry: + """Set up the NextDNS integration in Home Assistant.""" + entry = MockConfigEntry( + domain=DOMAIN, + title="Fake Profile", + unique_id="xyz12", + data={CONF_API_KEY: "fake_api_key", CONF_PROFILE_ID: "xyz12"}, + entry_id="d9aa37407ddac7b964a99e86312288d6", + ) + + with mock_nextdns(): entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() diff --git a/tests/components/nextdns/test_binary_sensor.py b/tests/components/nextdns/test_binary_sensor.py index 484b4e99aad5f..b69db4798d3a8 100644 --- a/tests/components/nextdns/test_binary_sensor.py +++ b/tests/components/nextdns/test_binary_sensor.py @@ -10,7 +10,7 @@ from homeassistant.helpers import entity_registry as er from homeassistant.util.dt import utcnow -from . import CONNECTION_STATUS, init_integration +from . import init_integration, mock_nextdns from tests.common import async_fire_time_changed @@ -57,19 +57,16 @@ async def test_availability(hass: HomeAssistant) -> None: side_effect=ApiError("API Error"), ): async_fire_time_changed(hass, future) - await hass.async_block_till_done() + await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get("binary_sensor.fake_profile_device_connection_status") assert state assert state.state == STATE_UNAVAILABLE future = utcnow() + timedelta(minutes=20) - with patch( - "homeassistant.components.nextdns.NextDns.connection_status", - return_value=CONNECTION_STATUS, - ): + with mock_nextdns(): async_fire_time_changed(hass, future) - await hass.async_block_till_done() + await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get("binary_sensor.fake_profile_device_connection_status") assert state diff --git a/tests/components/nextdns/test_sensor.py b/tests/components/nextdns/test_sensor.py index a6d9b4c545feb..951d220eccbb1 100644 --- a/tests/components/nextdns/test_sensor.py +++ b/tests/components/nextdns/test_sensor.py @@ -11,7 +11,7 @@ from homeassistant.helpers import entity_registry as er from homeassistant.util.dt import utcnow -from . import DNSSEC, ENCRYPTION, IP_VERSIONS, PROTOCOLS, STATUS, init_integration +from . import init_integration, mock_nextdns from tests.common import async_fire_time_changed @@ -332,7 +332,7 @@ async def test_availability( ), ): async_fire_time_changed(hass, future) - await hass.async_block_till_done() + await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get("sensor.fake_profile_dns_queries") assert state @@ -355,30 +355,9 @@ async def test_availability( assert state.state == STATE_UNAVAILABLE future = utcnow() + timedelta(minutes=20) - with ( - patch( - "homeassistant.components.nextdns.NextDns.get_analytics_status", - return_value=STATUS, - ), - patch( - "homeassistant.components.nextdns.NextDns.get_analytics_encryption", - return_value=ENCRYPTION, - ), - patch( - "homeassistant.components.nextdns.NextDns.get_analytics_dnssec", - return_value=DNSSEC, - ), - patch( - "homeassistant.components.nextdns.NextDns.get_analytics_ip_versions", - return_value=IP_VERSIONS, - ), - patch( - "homeassistant.components.nextdns.NextDns.get_analytics_protocols", - return_value=PROTOCOLS, - ), - ): + with mock_nextdns(): async_fire_time_changed(hass, future) - await hass.async_block_till_done() + await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get("sensor.fake_profile_dns_queries") assert state diff --git a/tests/components/nextdns/test_switch.py b/tests/components/nextdns/test_switch.py index f51ee32fd1066..a9dd0ba5cbdc5 100644 --- a/tests/components/nextdns/test_switch.py +++ b/tests/components/nextdns/test_switch.py @@ -22,7 +22,7 @@ from homeassistant.helpers import entity_registry as er from homeassistant.util.dt import utcnow -from . import SETTINGS, init_integration +from . import init_integration, mock_nextdns from tests.common import async_fire_time_changed @@ -693,19 +693,16 @@ async def test_availability(hass: HomeAssistant) -> None: side_effect=ApiError("API Error"), ): async_fire_time_changed(hass, future) - await hass.async_block_till_done() + await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get("switch.fake_profile_web3") assert state assert state.state == STATE_UNAVAILABLE future = utcnow() + timedelta(minutes=20) - with patch( - "homeassistant.components.nextdns.NextDns.get_settings", - return_value=SETTINGS, - ): + with mock_nextdns(): async_fire_time_changed(hass, future) - await hass.async_block_till_done() + await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get("switch.fake_profile_web3") assert state From c003d0a767f40093850b95a8b1ca0f81840a7aa9 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 1 Apr 2024 06:31:06 -1000 Subject: [PATCH 2/2] extract from context --- tests/components/nextdns/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/components/nextdns/__init__.py b/tests/components/nextdns/__init__.py index 0cf99ba3e0292..4cf74d72e633a 100644 --- a/tests/components/nextdns/__init__.py +++ b/tests/components/nextdns/__init__.py @@ -164,8 +164,9 @@ async def init_integration(hass: HomeAssistant) -> MockConfigEntry: entry_id="d9aa37407ddac7b964a99e86312288d6", ) + entry.add_to_hass(hass) + with mock_nextdns(): - entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done()