"""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'