diff --git a/homeassistant/components/bring/__init__.py b/homeassistant/components/bring/__init__.py index 7c300a0e013..e408001e458 100644 --- a/homeassistant/components/bring/__init__.py +++ b/homeassistant/components/bring/__init__.py @@ -39,23 +39,19 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await bring.load_lists() except BringRequestException as e: raise ConfigEntryNotReady( - f"Timeout while connecting for email '{email}'" - ) from e - except BringAuthException as e: - _LOGGER.error( - "Authentication failed for '%s', check your email and password", - email, - ) - raise ConfigEntryError( - f"Authentication failed for '{email}', check your email and password" + translation_domain=DOMAIN, + translation_key="setup_request_exception", ) from e except BringParseException as e: - _LOGGER.error( - "Failed to parse request '%s', check your email and password", - email, - ) raise ConfigEntryNotReady( - "Failed to parse response request from server, try again later" + translation_domain=DOMAIN, + translation_key="setup_request_exception", + ) from e + except BringAuthException as e: + raise ConfigEntryError( + translation_domain=DOMAIN, + translation_key="setup_authentication_exception", + translation_placeholders={CONF_EMAIL: email}, ) from e coordinator = BringDataUpdateCoordinator(hass, bring) diff --git a/homeassistant/components/bring/strings.json b/homeassistant/components/bring/strings.json index de3677bf5f1..6d61034bea8 100644 --- a/homeassistant/components/bring/strings.json +++ b/homeassistant/components/bring/strings.json @@ -16,5 +16,28 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" } + }, + "exceptions": { + "todo_save_item_failed": { + "message": "Failed to save item {name} to Bring! list" + }, + "todo_update_item_failed": { + "message": "Failed to update item {name} to Bring! list" + }, + "todo_rename_item_failed": { + "message": "Failed to rename item {name} to Bring! list" + }, + "todo_delete_item_failed": { + "message": "Failed to delete {count} item(s) from Bring! list" + }, + "setup_request_exception": { + "message": "Failed to connect to server, try again later" + }, + "setup_parse_exception": { + "message": "Failed to parse server response, try again later" + }, + "setup_authentication_exception": { + "message": "Authentication failed for {email}, check your email and password" + } } } diff --git a/homeassistant/components/bring/todo.py b/homeassistant/components/bring/todo.py index a1988e667b5..e631dc32951 100644 --- a/homeassistant/components/bring/todo.py +++ b/homeassistant/components/bring/todo.py @@ -112,7 +112,11 @@ class BringTodoListEntity( str(uuid.uuid4()), ) except BringRequestException as e: - raise HomeAssistantError("Unable to save todo item for bring") from e + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="todo_save_item_failed", + translation_placeholders={"name": item.summary or ""}, + ) from e await self.coordinator.async_refresh() @@ -167,7 +171,11 @@ class BringTodoListEntity( else BringItemOperation.COMPLETE, ) except BringRequestException as e: - raise HomeAssistantError("Unable to update todo item for bring") from e + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="todo_update_item_failed", + translation_placeholders={"name": item.summary or ""}, + ) from e else: try: await self.coordinator.bring.batch_update_list( @@ -191,7 +199,11 @@ class BringTodoListEntity( ) except BringRequestException as e: - raise HomeAssistantError("Unable to replace todo item for bring") from e + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="todo_rename_item_failed", + translation_placeholders={"name": item.summary or ""}, + ) from e await self.coordinator.async_refresh() @@ -212,6 +224,10 @@ class BringTodoListEntity( BringItemOperation.REMOVE, ) except BringRequestException as e: - raise HomeAssistantError("Unable to delete todo item for bring") from e + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="todo_delete_item_failed", + translation_placeholders={"count": str(len(uids))}, + ) from e await self.coordinator.async_refresh() diff --git a/tests/components/bring/test_init.py b/tests/components/bring/test_init.py index 8604648d916..db402bdd6d1 100644 --- a/tests/components/bring/test_init.py +++ b/tests/components/bring/test_init.py @@ -8,10 +8,12 @@ from homeassistant.components.bring import ( BringAuthException, BringParseException, BringRequestException, + async_setup_entry, ) from homeassistant.components.bring.const import DOMAIN from homeassistant.config_entries import ConfigEntryState from homeassistant.core import HomeAssistant +from homeassistant.exceptions import ConfigEntryError, ConfigEntryNotReady from tests.common import MockConfigEntry @@ -62,3 +64,26 @@ async def test_init_failure( mock_bring_client.login.side_effect = exception await setup_integration(hass, bring_config_entry) assert bring_config_entry.state == status + + +@pytest.mark.parametrize( + ("exception", "expected"), + [ + (BringRequestException, ConfigEntryNotReady), + (BringAuthException, ConfigEntryError), + (BringParseException, ConfigEntryNotReady), + ], +) +async def test_init_exceptions( + hass: HomeAssistant, + mock_bring_client: AsyncMock, + exception: Exception, + expected: Exception, + bring_config_entry: MockConfigEntry | None, +) -> None: + """Test an initialization error on integration load.""" + bring_config_entry.add_to_hass(hass) + mock_bring_client.login.side_effect = exception + + with pytest.raises(expected): + await async_setup_entry(hass, bring_config_entry)