diff --git a/homeassistant/components/amberelectric/services.py b/homeassistant/components/amberelectric/services.py index e1408444223..c4549498b91 100644 --- a/homeassistant/components/amberelectric/services.py +++ b/homeassistant/components/amberelectric/services.py @@ -3,7 +3,6 @@ from amberelectric.models.channel import ChannelType import voluptuous as vol -from homeassistant.config_entries import ConfigEntryState from homeassistant.const import ATTR_CONFIG_ENTRY_ID from homeassistant.core import ( HomeAssistant, @@ -13,6 +12,7 @@ from homeassistant.core import ( callback, ) from homeassistant.exceptions import ServiceValidationError +from homeassistant.helpers import service from homeassistant.helpers.selector import ConfigEntrySelector from homeassistant.util.json import JsonValueType @@ -37,23 +37,6 @@ GET_FORECASTS_SCHEMA = vol.Schema( ) -def async_get_entry(hass: HomeAssistant, config_entry_id: str) -> AmberConfigEntry: - """Get the Amber config entry.""" - if not (entry := hass.config_entries.async_get_entry(config_entry_id)): - raise ServiceValidationError( - translation_domain=DOMAIN, - translation_key="integration_not_found", - translation_placeholders={"target": config_entry_id}, - ) - if entry.state is not ConfigEntryState.LOADED: - raise ServiceValidationError( - translation_domain=DOMAIN, - translation_key="not_loaded", - translation_placeholders={"target": entry.title}, - ) - return entry - - def get_forecasts(channel_type: str, data: dict) -> list[JsonValueType]: """Return an array of forecasts.""" results: list[JsonValueType] = [] @@ -109,7 +92,9 @@ def async_setup_services(hass: HomeAssistant) -> None: async def handle_get_forecasts(call: ServiceCall) -> ServiceResponse: channel_type = call.data[ATTR_CHANNEL_TYPE] - entry = async_get_entry(hass, call.data[ATTR_CONFIG_ENTRY_ID]) + entry: AmberConfigEntry = service.async_get_config_entry( + hass, DOMAIN, call.data[ATTR_CONFIG_ENTRY_ID] + ) coordinator = entry.runtime_data forecasts = get_forecasts(channel_type, coordinator.data) return {"forecasts": forecasts} diff --git a/homeassistant/components/amberelectric/strings.json b/homeassistant/components/amberelectric/strings.json index 0e04aa6bf03..f793a3eca25 100644 --- a/homeassistant/components/amberelectric/strings.json +++ b/homeassistant/components/amberelectric/strings.json @@ -25,12 +25,6 @@ "exceptions": { "channel_not_found": { "message": "There is no {channel_type} channel at this site." - }, - "integration_not_found": { - "message": "Config entry \"{target}\" not found in registry." - }, - "not_loaded": { - "message": "{target} is not loaded." } }, "selector": { diff --git a/tests/components/amberelectric/test_services.py b/tests/components/amberelectric/test_services.py index bfff432b18c..cec59fc8f75 100644 --- a/tests/components/amberelectric/test_services.py +++ b/tests/components/amberelectric/test_services.py @@ -175,7 +175,7 @@ async def test_service_entry_availability( await hass.config_entries.async_setup(general_channel_config_entry.entry_id) await hass.async_block_till_done() - with pytest.raises(ServiceValidationError, match="Mock Title is not loaded"): + with pytest.raises(ServiceValidationError) as err: await hass.services.async_call( DOMAIN, SERVICE_GET_FORECASTS, @@ -186,11 +186,10 @@ async def test_service_entry_availability( blocking=True, return_response=True, ) + assert err.value.translation_key == "service_config_entry_not_loaded" + assert err.value.translation_placeholders["entry_title"] == "Mock Title" - with pytest.raises( - ServiceValidationError, - match='Config entry "bad-config_id" not found in registry', - ): + with pytest.raises(ServiceValidationError) as err: await hass.services.async_call( DOMAIN, SERVICE_GET_FORECASTS, @@ -198,3 +197,5 @@ async def test_service_entry_availability( blocking=True, return_response=True, ) + assert err.value.translation_key == "service_config_entry_not_found" + assert err.value.translation_placeholders["entry_id"] == "bad-config_id"