diff --git a/homeassistant/components/cloud/http_api.py b/homeassistant/components/cloud/http_api.py index 0cd08dd3d5f..e5f00873aab 100644 --- a/homeassistant/components/cloud/http_api.py +++ b/homeassistant/components/cloud/http_api.py @@ -23,7 +23,7 @@ from homeassistant.components.google_assistant import helpers as google_helpers from .const import ( DOMAIN, REQUEST_TIMEOUT, PREF_ENABLE_ALEXA, PREF_ENABLE_GOOGLE, PREF_GOOGLE_SECURE_DEVICES_PIN, InvalidTrustedNetworks, - InvalidTrustedProxies, PREF_ALEXA_REPORT_STATE) + InvalidTrustedProxies, PREF_ALEXA_REPORT_STATE, RequireRelink) _LOGGER = logging.getLogger(__name__) @@ -388,7 +388,7 @@ async def websocket_update_prefs(hass, connection, msg): connection.send_error(msg['id'], 'alexa_timeout', 'Timeout validating Alexa access token.') return - except alexa_errors.NoTokenAvailable: + except (alexa_errors.NoTokenAvailable, RequireRelink): connection.send_error( msg['id'], 'alexa_relink', 'Please go to the Alexa app and re-link the Home Assistant ' diff --git a/tests/components/cloud/test_http_api.py b/tests/components/cloud/test_http_api.py index bc60568f0d4..442643672eb 100644 --- a/tests/components/cloud/test_http_api.py +++ b/tests/components/cloud/test_http_api.py @@ -12,7 +12,7 @@ from homeassistant.core import State from homeassistant.auth.providers import trusted_networks as tn_auth from homeassistant.components.cloud.const import ( PREF_ENABLE_GOOGLE, PREF_ENABLE_ALEXA, PREF_GOOGLE_SECURE_DEVICES_PIN, - DOMAIN) + DOMAIN, RequireRelink) from homeassistant.components.google_assistant.helpers import ( GoogleEntity) from homeassistant.components.alexa.entities import LightCapabilities @@ -527,6 +527,44 @@ async def test_websocket_update_preferences(hass, hass_ws_client, assert setup_api[PREF_GOOGLE_SECURE_DEVICES_PIN] == '1234' +async def test_websocket_update_preferences_require_relink( + hass, hass_ws_client, aioclient_mock, setup_api, mock_cloud_login): + """Test updating preference requires relink.""" + client = await hass_ws_client(hass) + + with patch('homeassistant.components.cloud.alexa_config.AlexaConfig' + '.async_get_access_token', + side_effect=RequireRelink): + await client.send_json({ + 'id': 5, + 'type': 'cloud/update_prefs', + 'alexa_report_state': True, + }) + response = await client.receive_json() + + assert not response['success'] + assert response['error']['code'] == 'alexa_relink' + + +async def test_websocket_update_preferences_no_token( + hass, hass_ws_client, aioclient_mock, setup_api, mock_cloud_login): + """Test updating preference no token available.""" + client = await hass_ws_client(hass) + + with patch('homeassistant.components.cloud.alexa_config.AlexaConfig' + '.async_get_access_token', + side_effect=alexa_errors.NoTokenAvailable): + await client.send_json({ + 'id': 5, + 'type': 'cloud/update_prefs', + 'alexa_report_state': True, + }) + response = await client.receive_json() + + assert not response['success'] + assert response['error']['code'] == 'alexa_relink' + + async def test_enabling_webhook(hass, hass_ws_client, setup_api, mock_cloud_login): """Test we call right code to enable webhooks."""