Skip to content

Commit

Permalink
Catch uncaught Alexa error (#24785)
Browse files Browse the repository at this point in the history
  • Loading branch information
balloob committed Jun 27, 2019
1 parent dce667f commit c1d0ac7
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 3 deletions.
4 changes: 2 additions & 2 deletions homeassistant/components/cloud/http_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
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__)

Expand Down Expand Up @@ -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 '
Expand Down
40 changes: 39 additions & 1 deletion tests/components/cloud/test_http_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
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
Expand Down Expand Up @@ -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."""
Expand Down

0 comments on commit c1d0ac7

Please sign in to comment.