Add panel_iframe component

pull/2537/head
Paulus Schoutsen 2016-07-16 22:32:36 -07:00
parent 22b4aebeb3
commit fd5aad1ee7
2 changed files with 106 additions and 0 deletions
homeassistant/components
tests/components

View File

@ -0,0 +1,29 @@
import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.components.frontend import register_built_in_panel
DOMAIN = 'panel_iframe'
DEPENDENCIES = ['frontend']
CONF_TITLE = 'title'
CONF_ICON = 'icon'
CONF_URL = 'url'
CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({
cv.slug: {
vol.Optional(CONF_TITLE): cv.string,
vol.Optional(CONF_ICON): cv.icon,
vol.Required(CONF_URL): vol.Url(),
}})}, extra=vol.ALLOW_EXTRA)
def setup(hass, config):
"""Setup iframe frontend panels."""
for url_name, info in config[DOMAIN].items():
register_built_in_panel(
hass, 'iframe', info.get(CONF_TITLE), info.get(CONF_ICON),
url_name, {'url': info[CONF_URL]})
return True

View File

@ -0,0 +1,77 @@
"""The tests for the panel_iframe component."""
from collections import defaultdict
import unittest
from unittest.mock import patch
from homeassistant import bootstrap
from homeassistant.components import frontend
from tests.common import get_test_home_assistant
class TestPanelIframe(unittest.TestCase):
"""Test the panel_iframe component."""
def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant()
def teardown_method(self, method):
"""Stop everything that was started."""
self.hass.stop()
frontend.PANELS = {}
def test_wrong_config(self):
"""Test setup with wrong configuration."""
to_try = [
{'invalid space': {
'url': 'https://home-assistant.io'}},
{'router': {
'url': 'not-a-url'}}]
for conf in to_try:
assert not bootstrap.setup_component(
self.hass, 'panel_iframe', {
'panel_iframe': conf
})
@patch.dict('homeassistant.components.frontend.FINGERPRINTS', {
'panels/ha-panel-iframe.html': 'md5md5'})
def test_correct_config(self):
"""Test correct config."""
assert bootstrap.setup_component(
self.hass, 'panel_iframe', {
'panel_iframe': {
'router': {
'icon': 'mdi:network-wireless',
'title': 'Router',
'url': 'http://192.168.1.1',
},
'weather': {
'icon': 'mdi:weather',
'title': 'Weather',
'url': 'https://www.wunderground.com/us/ca/san-diego',
},
},
})
# 5 dev tools + map are automatically loaded
assert len(frontend.PANELS) == 8
assert frontend.PANELS['router'] == {
'component_name': 'iframe',
'config': {'url': 'http://192.168.1.1'},
'icon': 'mdi:network-wireless',
'title': 'Router',
'url': '/frontend/panels/iframe-md5md5.html',
'url_name': 'router'
}
assert frontend.PANELS['weather'] == {
'component_name': 'iframe',
'config': {'url': 'https://www.wunderground.com/us/ca/san-diego'},
'icon': 'mdi:weather',
'title': 'Weather',
'url': '/frontend/panels/iframe-md5md5.html',
'url_name': 'weather',
}