mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 21:06:19 +00:00
Hass.io Add-on panel support for Ingress (#23185)
* Hass.io Add-on panel support for Ingress * Revert part of discovery startup handling * Add type * Fix tests * Add tests * Fix lint * Fix lint on test
This commit is contained in:
128
tests/components/hassio/test_addon_panel.py
Normal file
128
tests/components/hassio/test_addon_panel.py
Normal file
@@ -0,0 +1,128 @@
|
||||
"""Test add-on panel."""
|
||||
from unittest.mock import patch, Mock
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant.setup import async_setup_component
|
||||
from homeassistant.const import HTTP_HEADER_HA_AUTH
|
||||
|
||||
from tests.common import mock_coro
|
||||
from . import API_PASSWORD
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def mock_all(aioclient_mock):
|
||||
"""Mock all setup requests."""
|
||||
aioclient_mock.post(
|
||||
"http://127.0.0.1/homeassistant/options", json={'result': 'ok'})
|
||||
aioclient_mock.get(
|
||||
"http://127.0.0.1/supervisor/ping", json={'result': 'ok'})
|
||||
aioclient_mock.post(
|
||||
"http://127.0.0.1/supervisor/options", json={'result': 'ok'})
|
||||
aioclient_mock.get(
|
||||
"http://127.0.0.1/homeassistant/info", json={
|
||||
'result': 'ok', 'data': {'last_version': '10.0'}})
|
||||
|
||||
|
||||
async def test_hassio_addon_panel_startup(hass, aioclient_mock, hassio_env):
|
||||
"""Test startup and panel setup after event."""
|
||||
aioclient_mock.get(
|
||||
"http://127.0.0.1/ingress/panels", json={
|
||||
'result': 'ok', 'data': {'panels': {
|
||||
"test1": {
|
||||
"enable": True,
|
||||
"title": "Test",
|
||||
"icon": "mdi:test",
|
||||
"admin": False
|
||||
},
|
||||
"test2": {
|
||||
"enable": False,
|
||||
"title": "Test 2",
|
||||
"icon": "mdi:test2",
|
||||
"admin": True
|
||||
},
|
||||
}}})
|
||||
|
||||
assert aioclient_mock.call_count == 0
|
||||
|
||||
with patch(
|
||||
'homeassistant.components.hassio.addon_panel._register_panel',
|
||||
Mock(return_value=mock_coro())
|
||||
) as mock_panel:
|
||||
await async_setup_component(hass, 'hassio', {
|
||||
'http': {
|
||||
'api_password': API_PASSWORD
|
||||
}
|
||||
})
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert aioclient_mock.call_count == 2
|
||||
assert mock_panel.called
|
||||
mock_panel.assert_called_with(
|
||||
hass, 'test1', {
|
||||
'enable': True, 'title': 'Test',
|
||||
'icon': 'mdi:test', 'admin': False
|
||||
})
|
||||
|
||||
|
||||
async def test_hassio_addon_panel_api(hass, aioclient_mock, hassio_env,
|
||||
hass_client):
|
||||
"""Test panel api after event."""
|
||||
aioclient_mock.get(
|
||||
"http://127.0.0.1/ingress/panels", json={
|
||||
'result': 'ok', 'data': {'panels': {
|
||||
"test1": {
|
||||
"enable": True,
|
||||
"title": "Test",
|
||||
"icon": "mdi:test",
|
||||
"admin": False
|
||||
},
|
||||
"test2": {
|
||||
"enable": False,
|
||||
"title": "Test 2",
|
||||
"icon": "mdi:test2",
|
||||
"admin": True
|
||||
},
|
||||
}}})
|
||||
|
||||
assert aioclient_mock.call_count == 0
|
||||
|
||||
with patch(
|
||||
'homeassistant.components.hassio.addon_panel._register_panel',
|
||||
Mock(return_value=mock_coro())
|
||||
) as mock_panel:
|
||||
await async_setup_component(hass, 'hassio', {
|
||||
'http': {
|
||||
'api_password': API_PASSWORD
|
||||
}
|
||||
})
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert aioclient_mock.call_count == 2
|
||||
assert mock_panel.called
|
||||
mock_panel.assert_called_with(
|
||||
hass, 'test1', {
|
||||
'enable': True, 'title': 'Test',
|
||||
'icon': 'mdi:test', 'admin': False
|
||||
})
|
||||
|
||||
hass_client = await hass_client()
|
||||
|
||||
resp = await hass_client.post(
|
||||
'/api/hassio_push/panel/test2', headers={
|
||||
HTTP_HEADER_HA_AUTH: API_PASSWORD
|
||||
})
|
||||
assert resp.status == 400
|
||||
|
||||
resp = await hass_client.post(
|
||||
'/api/hassio_push/panel/test1', headers={
|
||||
HTTP_HEADER_HA_AUTH: API_PASSWORD
|
||||
})
|
||||
assert resp.status == 200
|
||||
assert mock_panel.call_count == 2
|
||||
|
||||
mock_panel.assert_called_with(
|
||||
hass, 'test1', {
|
||||
'enable': True, 'title': 'Test',
|
||||
'icon': 'mdi:test', 'admin': False
|
||||
})
|
||||
Reference in New Issue
Block a user