From d3493c7e5a0c936a3ed61c484bb90bbda8606e2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= <mail@dahoiv.net>
Date: Sun, 10 Apr 2016 19:43:05 +0200
Subject: [PATCH] Config validation of yr sensor (#1767)

---
 homeassistant/components/sensor/yr.py | 20 ++++++++++------
 tests/components/sensor/test_yr.py    | 34 ++++++++++-----------------
 2 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/homeassistant/components/sensor/yr.py b/homeassistant/components/sensor/yr.py
index 0286fd834dd..3a434e30a85 100644
--- a/homeassistant/components/sensor/yr.py
+++ b/homeassistant/components/sensor/yr.py
@@ -5,9 +5,10 @@ For more details about this platform, please refer to the documentation at
 https://home-assistant.io/components/sensor.yr/
 """
 import logging
-
 import requests
+import voluptuous as vol
 
+import homeassistant.helpers.config_validation as cv
 from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE
 from homeassistant.helpers.entity import Entity
 from homeassistant.util import dt as dt_util
@@ -18,6 +19,8 @@ _LOGGER = logging.getLogger(__name__)
 
 REQUIREMENTS = ['xmltodict']
 
+CONF_MONITORED_CONDITIONS = 'monitored_conditions'
+
 # Sensor types are defined like so:
 SENSOR_TYPES = {
     'symbol': ['Symbol', None],
@@ -36,6 +39,13 @@ SENSOR_TYPES = {
     'dewpointTemperature': ['Dewpoint temperature', '°C'],
 }
 
+PLATFORM_SCHEMA = vol.Schema({
+    vol.Required('platform'): 'yr',
+    vol.Optional(CONF_MONITORED_CONDITIONS, default=[]):
+        [vol.In(SENSOR_TYPES.keys())],
+    vol.Optional('elevation'): cv.positive_int,
+})
+
 
 def setup_platform(hass, config, add_devices, discovery_info=None):
     """Setup the Yr.no sensor."""
@@ -58,12 +68,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
     weather = YrData(coordinates)
 
     dev = []
-    if 'monitored_conditions' in config:
-        for variable in config['monitored_conditions']:
-            if variable not in SENSOR_TYPES:
-                _LOGGER.error('Sensor type: "%s" does not exist', variable)
-            else:
-                dev.append(YrSensor(variable, weather))
+    for sensor_type in config[CONF_MONITORED_CONDITIONS]:
+        dev.append(YrSensor(sensor_type, weather))
 
     # add symbol as default sensor
     if len(dev) == 0:
diff --git a/tests/components/sensor/test_yr.py b/tests/components/sensor/test_yr.py
index aa15d7cf3ea..c60324e38b9 100644
--- a/tests/components/sensor/test_yr.py
+++ b/tests/components/sensor/test_yr.py
@@ -4,9 +4,8 @@ from unittest.mock import patch
 
 import pytest
 
-import homeassistant.components.sensor as sensor
+from homeassistant.bootstrap import _setup_component
 import homeassistant.util.dt as dt_util
-
 from tests.common import get_test_home_assistant
 
 
@@ -32,12 +31,9 @@ class TestSensorYr:
                    return_value=betamax_session):
             with patch('homeassistant.components.sensor.yr.dt_util.utcnow',
                        return_value=now):
-                assert sensor.setup(self.hass, {
-                    'sensor': {
-                        'platform': 'yr',
-                        'elevation': 0,
-                    }
-                })
+                    assert _setup_component(self.hass, 'sensor', {
+                                    'sensor': {'platform': 'yr',
+                                               'elevation': 0}})
 
         state = self.hass.states.get('sensor.yr_symbol')
 
@@ -53,19 +49,15 @@ class TestSensorYr:
                    return_value=betamax_session):
             with patch('homeassistant.components.sensor.yr.dt_util.utcnow',
                        return_value=now):
-                assert sensor.setup(self.hass, {
-                    'sensor': {
-                        'platform': 'yr',
-                        'elevation': 0,
-                        'monitored_conditions': {
-                            'pressure',
-                            'windDirection',
-                            'humidity',
-                            'fog',
-                            'windSpeed'
-                        }
-                    }
-                })
+                assert _setup_component(self.hass, 'sensor', {
+                                        'sensor': {'platform': 'yr',
+                                                   'elevation': 0,
+                                                   'monitored_conditions': [
+                                                       'pressure',
+                                                       'windDirection',
+                                                       'humidity',
+                                                       'fog',
+                                                       'windSpeed']}})
 
         state = self.hass.states.get('sensor.yr_pressure')
         assert 'hPa' == state.attributes.get('unit_of_measurement')
-- 
GitLab