-
-
Notifications
You must be signed in to change notification settings - Fork 28.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
80c5120
commit 38dd2bf
Showing
5 changed files
with
241 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
tests/testing_config/custom_components/test_weather/__init__.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
"""An integration with Weather platform.""" |
9 changes: 9 additions & 0 deletions
9
tests/testing_config/custom_components/test_weather/manifest.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"domain": "test_weather", | ||
"name": "Test Weather", | ||
"documentation": "http://example.com", | ||
"requirements": [], | ||
"dependencies": [], | ||
"codeowners": [], | ||
"version": "1.2.3" | ||
} |
210 changes: 210 additions & 0 deletions
210
tests/testing_config/custom_components/test_weather/weather.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,210 @@ | ||
"""Provide a mock weather platform. | ||
Call init before using it in your tests to ensure clean test data. | ||
""" | ||
from __future__ import annotations | ||
|
||
from typing import Any | ||
|
||
from homeassistant.components.weather import ( | ||
ATTR_FORECAST_CLOUD_COVERAGE, | ||
ATTR_FORECAST_HUMIDITY, | ||
ATTR_FORECAST_IS_DAYTIME, | ||
ATTR_FORECAST_NATIVE_APPARENT_TEMP, | ||
ATTR_FORECAST_NATIVE_DEW_POINT, | ||
ATTR_FORECAST_NATIVE_PRECIPITATION, | ||
ATTR_FORECAST_NATIVE_PRESSURE, | ||
ATTR_FORECAST_NATIVE_TEMP, | ||
ATTR_FORECAST_NATIVE_TEMP_LOW, | ||
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED, | ||
ATTR_FORECAST_NATIVE_WIND_SPEED, | ||
ATTR_FORECAST_UV_INDEX, | ||
ATTR_FORECAST_WIND_BEARING, | ||
Forecast, | ||
WeatherEntity, | ||
) | ||
|
||
from tests.common import MockEntity | ||
|
||
ENTITIES = [] | ||
|
||
|
||
def init(empty=False): | ||
"""Initialize the platform with entities.""" | ||
global ENTITIES | ||
ENTITIES = [] if empty else [MockWeatherMockForecast()] | ||
|
||
|
||
async def async_setup_platform( | ||
hass, config, async_add_entities_callback, discovery_info=None | ||
): | ||
"""Return mock entities.""" | ||
async_add_entities_callback(ENTITIES) | ||
|
||
|
||
class MockWeatherMockForecast(MockEntity, WeatherEntity): | ||
"""Mock weather class.""" | ||
|
||
def __init__(self, **values: Any) -> None: | ||
"""Initialize.""" | ||
super().__init__(**values) | ||
self.forecast_list: list[Forecast] | None = [ | ||
{ | ||
ATTR_FORECAST_NATIVE_TEMP: self.native_temperature, | ||
ATTR_FORECAST_NATIVE_APPARENT_TEMP: self.native_apparent_temperature, | ||
ATTR_FORECAST_NATIVE_TEMP_LOW: self.native_temperature, | ||
ATTR_FORECAST_NATIVE_DEW_POINT: self.native_dew_point, | ||
ATTR_FORECAST_CLOUD_COVERAGE: self.cloud_coverage, | ||
ATTR_FORECAST_NATIVE_PRESSURE: self.native_pressure, | ||
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED: self.native_wind_gust_speed, | ||
ATTR_FORECAST_NATIVE_WIND_SPEED: self.native_wind_speed, | ||
ATTR_FORECAST_WIND_BEARING: self.wind_bearing, | ||
ATTR_FORECAST_UV_INDEX: self.uv_index, | ||
ATTR_FORECAST_NATIVE_PRECIPITATION: self._values.get( | ||
"native_precipitation" | ||
), | ||
ATTR_FORECAST_HUMIDITY: self.humidity, | ||
} | ||
] | ||
|
||
@property | ||
def forecast(self) -> list[Forecast] | None: | ||
"""Return the forecast.""" | ||
return self.forecast_list | ||
|
||
async def async_forecast_daily(self) -> list[Forecast] | None: | ||
"""Return the forecast_daily.""" | ||
return self.forecast_list | ||
|
||
async def async_forecast_twice_daily(self) -> list[Forecast] | None: | ||
"""Return the forecast_twice_daily.""" | ||
return [ | ||
{ | ||
ATTR_FORECAST_NATIVE_TEMP: self.native_temperature, | ||
ATTR_FORECAST_NATIVE_APPARENT_TEMP: self.native_apparent_temperature, | ||
ATTR_FORECAST_NATIVE_TEMP_LOW: self.native_temperature, | ||
ATTR_FORECAST_NATIVE_DEW_POINT: self.native_dew_point, | ||
ATTR_FORECAST_CLOUD_COVERAGE: self.cloud_coverage, | ||
ATTR_FORECAST_NATIVE_PRESSURE: self.native_pressure, | ||
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED: self.native_wind_gust_speed, | ||
ATTR_FORECAST_NATIVE_WIND_SPEED: self.native_wind_speed, | ||
ATTR_FORECAST_WIND_BEARING: self.wind_bearing, | ||
ATTR_FORECAST_UV_INDEX: self.uv_index, | ||
ATTR_FORECAST_NATIVE_PRECIPITATION: self._values.get( | ||
"native_precipitation" | ||
), | ||
ATTR_FORECAST_HUMIDITY: self.humidity, | ||
ATTR_FORECAST_IS_DAYTIME: self._values.get("is_daytime"), | ||
} | ||
] | ||
|
||
async def async_forecast_hourly(self) -> list[Forecast] | None: | ||
"""Return the forecast_hourly.""" | ||
return [ | ||
{ | ||
ATTR_FORECAST_NATIVE_TEMP: self.native_temperature, | ||
ATTR_FORECAST_NATIVE_APPARENT_TEMP: self.native_apparent_temperature, | ||
ATTR_FORECAST_NATIVE_TEMP_LOW: self.native_temperature, | ||
ATTR_FORECAST_NATIVE_DEW_POINT: self.native_dew_point, | ||
ATTR_FORECAST_CLOUD_COVERAGE: self.cloud_coverage, | ||
ATTR_FORECAST_NATIVE_PRESSURE: self.native_pressure, | ||
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED: self.native_wind_gust_speed, | ||
ATTR_FORECAST_NATIVE_WIND_SPEED: self.native_wind_speed, | ||
ATTR_FORECAST_WIND_BEARING: self.wind_bearing, | ||
ATTR_FORECAST_UV_INDEX: self.uv_index, | ||
ATTR_FORECAST_NATIVE_PRECIPITATION: self._values.get( | ||
"native_precipitation" | ||
), | ||
ATTR_FORECAST_HUMIDITY: self.humidity, | ||
} | ||
] | ||
|
||
@property | ||
def native_temperature(self) -> float | None: | ||
"""Return the platform temperature.""" | ||
return self._handle("native_temperature") | ||
|
||
@property | ||
def native_apparent_temperature(self) -> float | None: | ||
"""Return the platform apparent temperature.""" | ||
return self._handle("native_apparent_temperature") | ||
|
||
@property | ||
def native_dew_point(self) -> float | None: | ||
"""Return the platform dewpoint temperature.""" | ||
return self._handle("native_dew_point") | ||
|
||
@property | ||
def native_temperature_unit(self) -> str | None: | ||
"""Return the unit of measurement for temperature.""" | ||
return self._handle("native_temperature_unit") | ||
|
||
@property | ||
def native_pressure(self) -> float | None: | ||
"""Return the pressure.""" | ||
return self._handle("native_pressure") | ||
|
||
@property | ||
def native_pressure_unit(self) -> str | None: | ||
"""Return the unit of measurement for pressure.""" | ||
return self._handle("native_pressure_unit") | ||
|
||
@property | ||
def humidity(self) -> float | None: | ||
"""Return the humidity.""" | ||
return self._handle("humidity") | ||
|
||
@property | ||
def native_wind_gust_speed(self) -> float | None: | ||
"""Return the wind speed.""" | ||
return self._handle("native_wind_gust_speed") | ||
|
||
@property | ||
def native_wind_speed(self) -> float | None: | ||
"""Return the wind speed.""" | ||
return self._handle("native_wind_speed") | ||
|
||
@property | ||
def native_wind_speed_unit(self) -> str | None: | ||
"""Return the unit of measurement for wind speed.""" | ||
return self._handle("native_wind_speed_unit") | ||
|
||
@property | ||
def wind_bearing(self) -> float | str | None: | ||
"""Return the wind bearing.""" | ||
return self._handle("wind_bearing") | ||
|
||
@property | ||
def ozone(self) -> float | None: | ||
"""Return the ozone level.""" | ||
return self._handle("ozone") | ||
|
||
@property | ||
def cloud_coverage(self) -> float | None: | ||
"""Return the cloud coverage in %.""" | ||
return self._handle("cloud_coverage") | ||
|
||
@property | ||
def uv_index(self) -> float | None: | ||
"""Return the UV index.""" | ||
return self._handle("uv_index") | ||
|
||
@property | ||
def native_visibility(self) -> float | None: | ||
"""Return the visibility.""" | ||
return self._handle("native_visibility") | ||
|
||
@property | ||
def native_visibility_unit(self) -> str | None: | ||
"""Return the unit of measurement for visibility.""" | ||
return self._handle("native_visibility_unit") | ||
|
||
@property | ||
def native_precipitation_unit(self) -> str | None: | ||
"""Return the native unit of measurement for accumulated precipitation.""" | ||
return self._handle("native_precipitation_unit") | ||
|
||
@property | ||
def condition(self) -> str | None: | ||
"""Return the current condition.""" | ||
return self._handle("condition") |