black test

This commit is contained in:
Flamm, Matthew H
2019-08-03 11:59:44 +01:00
parent 55934905c3
commit 53d7c74839

View File

@@ -7,16 +7,33 @@ import aiohttp
from homeassistant.components import weather from homeassistant.components import weather
from homeassistant.components.nws.weather import ATTR_FORECAST_PRECIP_PROB from homeassistant.components.nws.weather import ATTR_FORECAST_PRECIP_PROB
from homeassistant.components.weather import ( from homeassistant.components.weather import (
ATTR_WEATHER_HUMIDITY, ATTR_WEATHER_PRESSURE, ATTR_WEATHER_TEMPERATURE, ATTR_WEATHER_HUMIDITY,
ATTR_WEATHER_VISIBILITY, ATTR_WEATHER_WIND_BEARING, ATTR_WEATHER_PRESSURE,
ATTR_WEATHER_WIND_SPEED) ATTR_WEATHER_TEMPERATURE,
ATTR_WEATHER_VISIBILITY,
ATTR_WEATHER_WIND_BEARING,
ATTR_WEATHER_WIND_SPEED,
)
from homeassistant.components.weather import ( from homeassistant.components.weather import (
ATTR_FORECAST, ATTR_FORECAST_CONDITION, ATTR_FORECAST_TEMP, ATTR_FORECAST,
ATTR_FORECAST_TIME, ATTR_FORECAST_WIND_BEARING, ATTR_FORECAST_WIND_SPEED) ATTR_FORECAST_CONDITION,
ATTR_FORECAST_TEMP,
ATTR_FORECAST_TIME,
ATTR_FORECAST_WIND_BEARING,
ATTR_FORECAST_WIND_SPEED,
)
from homeassistant.const import ( from homeassistant.const import (
LENGTH_KILOMETERS, LENGTH_METERS, LENGTH_MILES, PRECISION_WHOLE, LENGTH_KILOMETERS,
PRESSURE_INHG, PRESSURE_PA, PRESSURE_HPA, TEMP_CELSIUS, TEMP_FAHRENHEIT) LENGTH_METERS,
LENGTH_MILES,
PRECISION_WHOLE,
PRESSURE_INHG,
PRESSURE_PA,
PRESSURE_HPA,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
)
from homeassistant.helpers.temperature import display_temp from homeassistant.helpers.temperature import display_temp
from homeassistant.util.pressure import convert as convert_pressure from homeassistant.util.pressure import convert as convert_pressure
from homeassistant.util.distance import convert as convert_distance from homeassistant.util.distance import convert as convert_distance
@@ -27,27 +44,28 @@ from homeassistant.setup import setup_component
from tests.common import get_test_home_assistant, MockDependency from tests.common import get_test_home_assistant, MockDependency
OBS = { OBS = {
'temperature': 7, "temperature": 7,
'relativeHumidity': 10, "relativeHumidity": 10,
'windDirection': 180, "windDirection": 180,
'visibility': 10000, "visibility": 10000,
'windSpeed': 10, "windSpeed": 10,
'seaLevelPressure': 30000, "seaLevelPressure": 30000,
'iconTime': 'day', "iconTime": "day",
'iconWeather': (('Fair/clear', None),), "iconWeather": (("Fair/clear", None),),
}
FORE = [
{
"temperature": 41,
"windBearing": 180,
"windSpeedAvg": 9,
"iconTime": "day",
"startTime": "2018-12-21T15:00:00-05:00",
"iconWeather": (("Fair/Clear", None), ("Thunderstorm (high cloud cover)", 40)),
} }
]
FORE = [{ STN = "STNA"
'temperature': 41,
'windBearing': 180,
'windSpeedAvg': 9,
'iconTime': 'day',
'startTime': '2018-12-21T15:00:00-05:00',
'iconWeather': (('Fair/Clear', None),
('Thunderstorm (high cloud cover)', 40),),
}]
STN = 'STNA'
class MockNws: class MockNws:
@@ -118,47 +136,53 @@ class TestNWS(unittest.TestCase):
"""Stop down everything that was started.""" """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
@MockDependency('pynws') @MockDependency("pynws")
@patch("pynws.SimpleNWS", new=MockNws) @patch("pynws.SimpleNWS", new=MockNws)
def test_nws(self, mock_pynws): def test_nws(self, mock_pynws):
"""Test for successfully setting up with imperial.""" """Test for successfully setting up with imperial."""
mock_pynws.SimpleNWS.data_obs = OBS mock_pynws.SimpleNWS.data_obs = OBS
mock_pynws.SimpleNWS.data_fore = FORE mock_pynws.SimpleNWS.data_fore = FORE
assert setup_component(self.hass, weather.DOMAIN, { assert setup_component(
'weather': { self.hass,
'name': 'HomeWeather', weather.DOMAIN,
'platform': 'nws', {
'api_key': 'test_email', "weather": {
} "name": "HomeWeather",
}) "platform": "nws",
"api_key": "test_email",
}
},
)
state = self.hass.states.get('weather.homeweather') state = self.hass.states.get("weather.homeweather")
assert state.state == 'sunny' assert state.state == "sunny"
data = state.attributes data = state.attributes
temp_f = convert_temperature(7, TEMP_CELSIUS, TEMP_FAHRENHEIT) temp_f = convert_temperature(7, TEMP_CELSIUS, TEMP_FAHRENHEIT)
assert data.get(ATTR_WEATHER_TEMPERATURE) == \ assert data.get(ATTR_WEATHER_TEMPERATURE) == display_temp(
display_temp(self.hass, temp_f, TEMP_FAHRENHEIT, PRECISION_WHOLE) self.hass, temp_f, TEMP_FAHRENHEIT, PRECISION_WHOLE
)
assert data.get(ATTR_WEATHER_HUMIDITY) == 10 assert data.get(ATTR_WEATHER_HUMIDITY) == 10
assert data.get(ATTR_WEATHER_PRESSURE) == round( assert data.get(ATTR_WEATHER_PRESSURE) == round(
convert_pressure(30000, PRESSURE_PA, PRESSURE_INHG), 2) convert_pressure(30000, PRESSURE_PA, PRESSURE_INHG), 2
)
assert data.get(ATTR_WEATHER_WIND_SPEED) == round(10 * 2.237) assert data.get(ATTR_WEATHER_WIND_SPEED) == round(10 * 2.237)
assert data.get(ATTR_WEATHER_WIND_BEARING) == 180 assert data.get(ATTR_WEATHER_WIND_BEARING) == 180
assert data.get(ATTR_WEATHER_VISIBILITY) == round( assert data.get(ATTR_WEATHER_VISIBILITY) == round(
convert_distance(10000, LENGTH_METERS, LENGTH_MILES)) convert_distance(10000, LENGTH_METERS, LENGTH_MILES)
assert state.attributes.get('friendly_name') == 'HomeWeather' )
assert state.attributes.get("friendly_name") == "HomeWeather"
forecast = data.get(ATTR_FORECAST) forecast = data.get(ATTR_FORECAST)
assert forecast[0].get(ATTR_FORECAST_CONDITION) == 'lightning-rainy' assert forecast[0].get(ATTR_FORECAST_CONDITION) == "lightning-rainy"
assert forecast[0].get(ATTR_FORECAST_PRECIP_PROB) == 40 assert forecast[0].get(ATTR_FORECAST_PRECIP_PROB) == 40
assert forecast[0].get(ATTR_FORECAST_TEMP) == 41 assert forecast[0].get(ATTR_FORECAST_TEMP) == 41
assert forecast[0].get(ATTR_FORECAST_TIME) == \ assert forecast[0].get(ATTR_FORECAST_TIME) == "2018-12-21T15:00:00-05:00"
'2018-12-21T15:00:00-05:00'
assert forecast[0].get(ATTR_FORECAST_WIND_BEARING) == 180 assert forecast[0].get(ATTR_FORECAST_WIND_BEARING) == 180
assert forecast[0].get(ATTR_FORECAST_WIND_SPEED) == 9 assert forecast[0].get(ATTR_FORECAST_WIND_SPEED) == 9
@MockDependency('pynws') @MockDependency("pynws")
@patch("pynws.SimpleNWS", new=MockNws) @patch("pynws.SimpleNWS", new=MockNws)
def test_nws_metric(self, mock_pynws): def test_nws_metric(self, mock_pynws):
"""Test for successfully setting up with metric.""" """Test for successfully setting up with metric."""
@@ -166,120 +190,148 @@ class TestNWS(unittest.TestCase):
mock_pynws.SimpleNWS.data_fore = FORE mock_pynws.SimpleNWS.data_fore = FORE
self.hass.config.units = METRIC_SYSTEM self.hass.config.units = METRIC_SYSTEM
assert setup_component(self.hass, weather.DOMAIN, { assert setup_component(
'weather': { self.hass,
'name': 'HomeWeather', weather.DOMAIN,
'platform': 'nws', {
'api_key': 'test_email', "weather": {
} "name": "HomeWeather",
}) "platform": "nws",
"api_key": "test_email",
}
},
)
state = self.hass.states.get('weather.homeweather') state = self.hass.states.get("weather.homeweather")
assert state.state == 'sunny' assert state.state == "sunny"
data = state.attributes data = state.attributes
temp_f = convert_temperature(7, TEMP_CELSIUS, TEMP_FAHRENHEIT) temp_f = convert_temperature(7, TEMP_CELSIUS, TEMP_FAHRENHEIT)
assert data.get(ATTR_WEATHER_TEMPERATURE) == \ assert data.get(ATTR_WEATHER_TEMPERATURE) == display_temp(
display_temp(self.hass, temp_f, TEMP_FAHRENHEIT, PRECISION_WHOLE) self.hass, temp_f, TEMP_FAHRENHEIT, PRECISION_WHOLE
)
assert data.get(ATTR_WEATHER_HUMIDITY) == 10 assert data.get(ATTR_WEATHER_HUMIDITY) == 10
assert data.get(ATTR_WEATHER_PRESSURE) == round( assert data.get(ATTR_WEATHER_PRESSURE) == round(
convert_pressure(30000, PRESSURE_PA, PRESSURE_HPA)) convert_pressure(30000, PRESSURE_PA, PRESSURE_HPA)
)
assert data.get(ATTR_WEATHER_WIND_SPEED) == round(3.6 * 10) assert data.get(ATTR_WEATHER_WIND_SPEED) == round(3.6 * 10)
assert data.get(ATTR_WEATHER_WIND_BEARING) == 180 assert data.get(ATTR_WEATHER_WIND_BEARING) == 180
assert data.get(ATTR_WEATHER_VISIBILITY) == round( assert data.get(ATTR_WEATHER_VISIBILITY) == round(
convert_distance(10000, LENGTH_METERS, LENGTH_KILOMETERS)) convert_distance(10000, LENGTH_METERS, LENGTH_KILOMETERS)
assert state.attributes.get('friendly_name') == 'HomeWeather' )
assert state.attributes.get("friendly_name") == "HomeWeather"
forecast = data.get(ATTR_FORECAST) forecast = data.get(ATTR_FORECAST)
assert forecast[0].get(ATTR_FORECAST_CONDITION) == 'lightning-rainy' assert forecast[0].get(ATTR_FORECAST_CONDITION) == "lightning-rainy"
assert forecast[0].get(ATTR_FORECAST_PRECIP_PROB) == 40 assert forecast[0].get(ATTR_FORECAST_PRECIP_PROB) == 40
assert forecast[0].get(ATTR_FORECAST_TEMP) == convert_temperature( assert forecast[0].get(ATTR_FORECAST_TEMP) == convert_temperature(
41, TEMP_FAHRENHEIT, TEMP_CELSIUS) 41, TEMP_FAHRENHEIT, TEMP_CELSIUS
assert forecast[0].get(ATTR_FORECAST_TIME) == \ )
'2018-12-21T15:00:00-05:00' assert forecast[0].get(ATTR_FORECAST_TIME) == "2018-12-21T15:00:00-05:00"
assert forecast[0].get(ATTR_FORECAST_WIND_BEARING) == 180 assert forecast[0].get(ATTR_FORECAST_WIND_BEARING) == 180
assert forecast[0].get(ATTR_FORECAST_WIND_SPEED) == round( assert forecast[0].get(ATTR_FORECAST_WIND_SPEED) == round(
convert_distance(9, LENGTH_MILES, LENGTH_KILOMETERS)) convert_distance(9, LENGTH_MILES, LENGTH_KILOMETERS)
)
@MockDependency('pynws') @MockDependency("pynws")
@patch("pynws.SimpleNWS", new=MockNws) @patch("pynws.SimpleNWS", new=MockNws)
def test_nws_no_obs_fore1x(self, mock_pynws): def test_nws_no_obs_fore1x(self, mock_pynws):
"""Test with no data.""" """Test with no data."""
assert setup_component(self.hass, weather.DOMAIN, { assert setup_component(
'weather': { self.hass,
'name': 'HomeWeather', weather.DOMAIN,
'platform': 'nws', {
'api_key': 'test_email', "weather": {
} "name": "HomeWeather",
}) "platform": "nws",
"api_key": "test_email",
}
},
)
state = self.hass.states.get('weather.homeweather') state = self.hass.states.get("weather.homeweather")
assert state.state == 'unknown' assert state.state == "unknown"
@MockDependency('pynws') @MockDependency("pynws")
@patch("pynws.SimpleNWS", new=MockNws) @patch("pynws.SimpleNWS", new=MockNws)
def test_nws_missing_valuess(self, mock_pynws): def test_nws_missing_valuess(self, mock_pynws):
"""Test with missing data.""" """Test with missing data."""
mock_pynws.SimpleNWS.data_obs = {key: None for key in OBS} mock_pynws.SimpleNWS.data_obs = {key: None for key in OBS}
mock_pynws.SimpleNWS.data_fore = [{key: None for key in FORE[0]}] mock_pynws.SimpleNWS.data_fore = [{key: None for key in FORE[0]}]
assert setup_component(self.hass, weather.DOMAIN, { assert setup_component(
'weather': { self.hass,
'name': 'HomeWeather', weather.DOMAIN,
'platform': 'nws', {
'api_key': 'test_email', "weather": {
} "name": "HomeWeather",
}) "platform": "nws",
"api_key": "test_email",
}
},
)
state = self.hass.states.get('weather.homeweather') state = self.hass.states.get("weather.homeweather")
assert state.state == 'unknown' assert state.state == "unknown"
@MockDependency('pynws') @MockDependency("pynws")
@patch("pynws.SimpleNWS", new=MockNws) @patch("pynws.SimpleNWS", new=MockNws)
def test_nws_error_obs(self, mock_pynws): def test_nws_error_obs(self, mock_pynws):
"""Test for successfully setting up the NWS platform with name.""" """Test for successfully setting up the NWS platform with name."""
mock_pynws.SimpleNWS.error_obs = True mock_pynws.SimpleNWS.error_obs = True
assert setup_component(self.hass, weather.DOMAIN, { assert setup_component(
'weather': { self.hass,
'name': 'HomeWeather', weather.DOMAIN,
'platform': 'nws', {
'api_key': 'test_email', "weather": {
} "name": "HomeWeather",
}) "platform": "nws",
"api_key": "test_email",
}
},
)
state = self.hass.states.get('weather.homeweather') state = self.hass.states.get("weather.homeweather")
assert state.state == 'unknown' assert state.state == "unknown"
@MockDependency('pynws') @MockDependency("pynws")
@patch("pynws.SimpleNWS", new=MockNws) @patch("pynws.SimpleNWS", new=MockNws)
def test_nws_error_fore(self, mock_pynws): def test_nws_error_fore(self, mock_pynws):
"""Test error forecast.""" """Test error forecast."""
mock_pynws.SimpleNWS.error_fore = True mock_pynws.SimpleNWS.error_fore = True
assert setup_component(self.hass, weather.DOMAIN, { assert setup_component(
'weather': { self.hass,
'name': 'HomeWeather', weather.DOMAIN,
'platform': 'nws', {
'api_key': 'test_email', "weather": {
} "name": "HomeWeather",
}) "platform": "nws",
"api_key": "test_email",
}
},
)
state = self.hass.states.get('weather.homeweather') state = self.hass.states.get("weather.homeweather")
data = state.attributes data = state.attributes
assert data.get('forecast') is None assert data.get("forecast") is None
@MockDependency('pynws') @MockDependency("pynws")
@patch("pynws.SimpleNWS", new=MockNws) @patch("pynws.SimpleNWS", new=MockNws)
def test_nws_error_stn(self, mock_pynws): def test_nws_error_stn(self, mock_pynws):
"""Test station error..""" """Test station error.."""
mock_pynws.SimpleNWS.error_stn = True mock_pynws.SimpleNWS.error_stn = True
assert setup_component(self.hass, weather.DOMAIN, { assert setup_component(
'weather': { self.hass,
'name': 'HomeWeather', weather.DOMAIN,
'platform': 'nws', {
'api_key': 'test_email', "weather": {
} "name": "HomeWeather",
}) "platform": "nws",
"api_key": "test_email",
}
},
)
state = self.hass.states.get('weather.homeweather') state = self.hass.states.get("weather.homeweather")
assert state is None assert state is None