135 lines
3.8 KiB
Python
135 lines
3.8 KiB
Python
"""The tests for the IPMA weather component."""
|
|
from unittest.mock import patch
|
|
from collections import namedtuple
|
|
|
|
from homeassistant.components import weather
|
|
from homeassistant.components.weather import (
|
|
ATTR_WEATHER_HUMIDITY,
|
|
ATTR_WEATHER_PRESSURE,
|
|
ATTR_WEATHER_TEMPERATURE,
|
|
ATTR_WEATHER_WIND_BEARING,
|
|
ATTR_WEATHER_WIND_SPEED,
|
|
DOMAIN as WEATHER_DOMAIN,
|
|
)
|
|
|
|
from tests.common import MockConfigEntry, mock_coro
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
TEST_CONFIG = {"name": "HomeTown", "latitude": "40.00", "longitude": "-8.00"}
|
|
|
|
|
|
class MockStation:
|
|
"""Mock Station from pyipma."""
|
|
|
|
async def observation(self):
|
|
"""Mock Observation."""
|
|
Observation = namedtuple(
|
|
"Observation",
|
|
[
|
|
"temperature",
|
|
"humidity",
|
|
"windspeed",
|
|
"winddirection",
|
|
"precipitation",
|
|
"pressure",
|
|
"description",
|
|
],
|
|
)
|
|
|
|
return Observation(18, 71.0, 3.94, "NW", 0, 1000.0, "---")
|
|
|
|
async def forecast(self):
|
|
"""Mock Forecast."""
|
|
Forecast = namedtuple(
|
|
"Forecast",
|
|
[
|
|
"precipitaProb",
|
|
"tMin",
|
|
"tMax",
|
|
"predWindDir",
|
|
"idWeatherType",
|
|
"classWindSpeed",
|
|
"longitude",
|
|
"forecastDate",
|
|
"classPrecInt",
|
|
"latitude",
|
|
"description",
|
|
],
|
|
)
|
|
|
|
return [
|
|
Forecast(
|
|
73.0,
|
|
13.7,
|
|
18.7,
|
|
"NW",
|
|
6,
|
|
2,
|
|
-8.64,
|
|
"2018-05-31",
|
|
2,
|
|
40.61,
|
|
"Aguaceiros, com vento Moderado de Noroeste",
|
|
)
|
|
]
|
|
|
|
@property
|
|
def local(self):
|
|
"""Mock location."""
|
|
return "HomeTown"
|
|
|
|
@property
|
|
def latitude(self):
|
|
"""Mock latitude."""
|
|
return 0
|
|
|
|
@property
|
|
def longitude(self):
|
|
"""Mock longitude."""
|
|
return 0
|
|
|
|
|
|
async def test_setup_configuration(hass):
|
|
"""Test for successfully setting up the IPMA platform."""
|
|
with patch(
|
|
"homeassistant.components.ipma.weather.async_get_station",
|
|
return_value=mock_coro(MockStation()),
|
|
):
|
|
assert await async_setup_component(
|
|
hass, weather.DOMAIN, {"weather": {"name": "HomeTown", "platform": "ipma"}}
|
|
)
|
|
await hass.async_block_till_done()
|
|
|
|
state = hass.states.get("weather.hometown")
|
|
assert state.state == "rainy"
|
|
|
|
data = state.attributes
|
|
assert data.get(ATTR_WEATHER_TEMPERATURE) == 18.0
|
|
assert data.get(ATTR_WEATHER_HUMIDITY) == 71
|
|
assert data.get(ATTR_WEATHER_PRESSURE) == 1000.0
|
|
assert data.get(ATTR_WEATHER_WIND_SPEED) == 3.94
|
|
assert data.get(ATTR_WEATHER_WIND_BEARING) == "NW"
|
|
assert state.attributes.get("friendly_name") == "HomeTown"
|
|
|
|
|
|
async def test_setup_config_flow(hass):
|
|
"""Test for successfully setting up the IPMA platform."""
|
|
with patch(
|
|
"homeassistant.components.ipma.weather.async_get_station",
|
|
return_value=mock_coro(MockStation()),
|
|
):
|
|
entry = MockConfigEntry(domain="ipma", data=TEST_CONFIG)
|
|
await hass.config_entries.async_forward_entry_setup(entry, WEATHER_DOMAIN)
|
|
await hass.async_block_till_done()
|
|
|
|
state = hass.states.get("weather.hometown")
|
|
assert state.state == "rainy"
|
|
|
|
data = state.attributes
|
|
assert data.get(ATTR_WEATHER_TEMPERATURE) == 18.0
|
|
assert data.get(ATTR_WEATHER_HUMIDITY) == 71
|
|
assert data.get(ATTR_WEATHER_PRESSURE) == 1000.0
|
|
assert data.get(ATTR_WEATHER_WIND_SPEED) == 3.94
|
|
assert data.get(ATTR_WEATHER_WIND_BEARING) == "NW"
|
|
assert state.attributes.get("friendly_name") == "HomeTown"
|