Fix mobile_app cloudhook creation (#107068)
This commit is contained in:
parent
6da82cf07e
commit
c063bf403a
7 changed files with 113 additions and 17 deletions
|
@ -1,12 +1,18 @@
|
|||
"""Test the cloud component."""
|
||||
from collections.abc import Callable, Coroutine
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from hass_nabucasa import Cloud
|
||||
import pytest
|
||||
|
||||
from homeassistant.components import cloud
|
||||
from homeassistant.components.cloud.const import DOMAIN
|
||||
from homeassistant.components.cloud import (
|
||||
CloudNotAvailable,
|
||||
CloudNotConnected,
|
||||
async_get_or_create_cloudhook,
|
||||
)
|
||||
from homeassistant.components.cloud.const import DOMAIN, PREF_CLOUDHOOKS
|
||||
from homeassistant.components.cloud.prefs import STORAGE_KEY
|
||||
from homeassistant.const import EVENT_HOMEASSISTANT_STOP
|
||||
from homeassistant.core import Context, HomeAssistant
|
||||
|
@ -214,3 +220,57 @@ async def test_remote_ui_url(hass: HomeAssistant, mock_cloud_fixture) -> None:
|
|||
cl.client.prefs._prefs["remote_domain"] = "example.com"
|
||||
|
||||
assert cloud.async_remote_ui_url(hass) == "https://example.com"
|
||||
|
||||
|
||||
async def test_async_get_or_create_cloudhook(
|
||||
hass: HomeAssistant,
|
||||
cloud: MagicMock,
|
||||
set_cloud_prefs: Callable[[dict[str, Any]], Coroutine[Any, Any, None]],
|
||||
) -> None:
|
||||
"""Test async_get_or_create_cloudhook."""
|
||||
assert await async_setup_component(hass, "cloud", {"cloud": {}})
|
||||
await hass.async_block_till_done()
|
||||
|
||||
webhook_id = "mock-webhook-id"
|
||||
cloudhook_url = "https://cloudhook.nabu.casa/abcdefg"
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.cloud.async_create_cloudhook",
|
||||
return_value=cloudhook_url,
|
||||
) as async_create_cloudhook_mock:
|
||||
# create cloudhook as it does not exist
|
||||
assert (await async_get_or_create_cloudhook(hass, webhook_id)) == cloudhook_url
|
||||
async_create_cloudhook_mock.assert_called_once_with(hass, webhook_id)
|
||||
|
||||
await set_cloud_prefs(
|
||||
{
|
||||
PREF_CLOUDHOOKS: {
|
||||
webhook_id: {
|
||||
"webhook_id": webhook_id,
|
||||
"cloudhook_id": "random-id",
|
||||
"cloudhook_url": cloudhook_url,
|
||||
"managed": True,
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
async_create_cloudhook_mock.reset_mock()
|
||||
|
||||
# get cloudhook as it exists
|
||||
assert await async_get_or_create_cloudhook(hass, webhook_id) == cloudhook_url
|
||||
async_create_cloudhook_mock.assert_not_called()
|
||||
|
||||
# Simulate logged out
|
||||
cloud.id_token = None
|
||||
|
||||
# Not logged in
|
||||
with pytest.raises(CloudNotAvailable):
|
||||
await async_get_or_create_cloudhook(hass, webhook_id)
|
||||
|
||||
# Simulate disconnected
|
||||
cloud.iot.state = "disconnected"
|
||||
|
||||
# Not connected
|
||||
with pytest.raises(CloudNotConnected):
|
||||
await async_get_or_create_cloudhook(hass, webhook_id)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue