From b36321988f2fb4f7fa43d8f6543c516ec3938ba9 Mon Sep 17 00:00:00 2001 From: Rami Mosleh Date: Fri, 26 Aug 2022 21:57:43 +0300 Subject: [PATCH] Deprecate speedtest service (#77261) deprecate speedtest service --- .../components/speedtestdotnet/__init__.py | 20 +++++++++++++ .../components/speedtestdotnet/manifest.json | 1 + .../components/speedtestdotnet/strings.json | 13 ++++++++ .../speedtestdotnet/translations/en.json | 13 ++++++++ tests/components/speedtestdotnet/test_init.py | 30 +++++++++++++++++++ 5 files changed, 77 insertions(+) diff --git a/homeassistant/components/speedtestdotnet/__init__.py b/homeassistant/components/speedtestdotnet/__init__.py index 2684b24c81f..0f236402eb4 100644 --- a/homeassistant/components/speedtestdotnet/__init__.py +++ b/homeassistant/components/speedtestdotnet/__init__.py @@ -6,6 +6,8 @@ import logging import speedtest +from homeassistant.components.repairs.issue_handler import async_create_issue +from homeassistant.components.repairs.models import IssueSeverity from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_SCAN_INTERVAL, EVENT_HOMEASSISTANT_STARTED from homeassistant.core import CoreState, HomeAssistant, ServiceCall @@ -142,6 +144,24 @@ class SpeedTestDataCoordinator(DataUpdateCoordinator): async def request_update(call: ServiceCall) -> None: """Request update.""" + async_create_issue( + self.hass, + DOMAIN, + "deprecated_service", + breaks_in_ha_version="2022.11.0", + is_fixable=True, + is_persistent=True, + severity=IssueSeverity.WARNING, + translation_key="deprecated_service", + ) + + _LOGGER.warning( + ( + 'The "%s" service is deprecated and will be removed in "2022.11.0"; ' + 'use the "homeassistant.update_entity" service and pass it a target Speedtest entity_id' + ), + SPEED_TEST_SERVICE, + ) await self.async_request_refresh() self.hass.services.async_register(DOMAIN, SPEED_TEST_SERVICE, request_update) diff --git a/homeassistant/components/speedtestdotnet/manifest.json b/homeassistant/components/speedtestdotnet/manifest.json index 1df9d6c236a..04400c14781 100644 --- a/homeassistant/components/speedtestdotnet/manifest.json +++ b/homeassistant/components/speedtestdotnet/manifest.json @@ -3,6 +3,7 @@ "name": "Speedtest.net", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/speedtestdotnet", + "dependencies": ["repairs"], "requirements": ["speedtest-cli==2.1.3"], "codeowners": ["@rohankapoorcom", "@engrbm87"], "iot_class": "cloud_polling" diff --git a/homeassistant/components/speedtestdotnet/strings.json b/homeassistant/components/speedtestdotnet/strings.json index c4dad30cb09..d4117d82cf3 100644 --- a/homeassistant/components/speedtestdotnet/strings.json +++ b/homeassistant/components/speedtestdotnet/strings.json @@ -19,5 +19,18 @@ } } } + }, + "issues": { + "deprecated_service": { + "title": "The speedtest service is being removed", + "fix_flow": { + "step": { + "confirm": { + "title": "The speedtest service is being removed", + "description": "Update any automations or scripts that use this service to instead use the `homeassistant.update_entity` service with a target Speedtest entity_id. Then, click SUBMIT below to mark this issue as resolved." + } + } + } + } } } diff --git a/homeassistant/components/speedtestdotnet/translations/en.json b/homeassistant/components/speedtestdotnet/translations/en.json index eab480073bc..623aee3b2e8 100644 --- a/homeassistant/components/speedtestdotnet/translations/en.json +++ b/homeassistant/components/speedtestdotnet/translations/en.json @@ -9,6 +9,19 @@ } } }, + "issues": { + "deprecated_service": { + "fix_flow": { + "step": { + "confirm": { + "description": "Update any automations or scripts that use this service to instead use the `homeassistant.update_entity` service with a target Speedtest entity_id. Then, click SUBMIT below to mark this issue as resolved.", + "title": "The speedtest service is being removed" + } + } + }, + "title": "The speedtest service is being removed" + } + }, "options": { "step": { "init": { diff --git a/tests/components/speedtestdotnet/test_init.py b/tests/components/speedtestdotnet/test_init.py index 61487ca8329..b4186ecacef 100644 --- a/tests/components/speedtestdotnet/test_init.py +++ b/tests/components/speedtestdotnet/test_init.py @@ -1,7 +1,11 @@ """Tests for SpeedTest integration.""" + +from collections.abc import Awaitable from datetime import timedelta +from typing import Callable from unittest.mock import MagicMock +from aiohttp import ClientWebSocketResponse import speedtest from homeassistant.components.speedtestdotnet.const import ( @@ -17,6 +21,7 @@ from homeassistant.core import HomeAssistant import homeassistant.util.dt as dt_util from tests.common import MockConfigEntry, async_fire_time_changed +from tests.components.repairs import get_repairs async def test_successful_config_entry(hass: HomeAssistant) -> None: @@ -120,3 +125,28 @@ async def test_get_best_server_error(hass: HomeAssistant, mock_api: MagicMock) - state = hass.states.get("sensor.speedtest_ping") assert state is not None assert state.state == STATE_UNAVAILABLE + + +async def test_deprecated_service_alert( + hass: HomeAssistant, + hass_ws_client: Callable[[HomeAssistant], Awaitable[ClientWebSocketResponse]], +) -> None: + """Test that an issue is raised if deprecated services is called.""" + entry = MockConfigEntry( + domain=DOMAIN, + ) + entry.add_to_hass(hass) + + await hass.config_entries.async_setup(entry.entry_id) + await hass.async_block_till_done() + + await hass.services.async_call( + DOMAIN, + "speedtest", + {}, + blocking=True, + ) + await hass.async_block_till_done() + issues = await get_repairs(hass, hass_ws_client) + assert len(issues) == 1 + assert issues[0]["issue_id"] == "deprecated_service"