244 lines
9.4 KiB
Python
244 lines
9.4 KiB
Python
"""The tests for the Season sensor platform."""
|
|
# pylint: disable=protected-access
|
|
from datetime import datetime
|
|
import unittest
|
|
|
|
import homeassistant.components.season.sensor as season
|
|
from homeassistant.setup import setup_component
|
|
|
|
from tests.common import get_test_home_assistant
|
|
|
|
HEMISPHERE_NORTHERN = {
|
|
"homeassistant": {"latitude": "48.864716", "longitude": "2.349014"},
|
|
"sensor": {"platform": "season", "type": "astronomical"},
|
|
}
|
|
|
|
HEMISPHERE_SOUTHERN = {
|
|
"homeassistant": {"latitude": "-33.918861", "longitude": "18.423300"},
|
|
"sensor": {"platform": "season", "type": "astronomical"},
|
|
}
|
|
|
|
HEMISPHERE_EQUATOR = {
|
|
"homeassistant": {"latitude": "0", "longitude": "-51.065100"},
|
|
"sensor": {"platform": "season", "type": "astronomical"},
|
|
}
|
|
|
|
HEMISPHERE_EMPTY = {
|
|
"homeassistant": {},
|
|
"sensor": {"platform": "season", "type": "meteorological"},
|
|
}
|
|
|
|
|
|
# pylint: disable=invalid-name
|
|
class TestSeason(unittest.TestCase):
|
|
"""Test the season platform."""
|
|
|
|
DEVICE = None
|
|
CONFIG_ASTRONOMICAL = {"type": "astronomical"}
|
|
CONFIG_METEOROLOGICAL = {"type": "meteorological"}
|
|
|
|
def add_entities(self, devices):
|
|
"""Mock add devices."""
|
|
for device in devices:
|
|
self.DEVICE = device
|
|
|
|
def setUp(self):
|
|
"""Set up things to be run when tests are started."""
|
|
self.hass = get_test_home_assistant()
|
|
|
|
def tearDown(self):
|
|
"""Stop everything that was started."""
|
|
self.hass.stop()
|
|
|
|
def test_season_should_be_summer_northern_astronomical(self):
|
|
"""Test that season should be summer."""
|
|
# A known day in summer
|
|
summer_day = datetime(2017, 9, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
summer_day, season.NORTHERN, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert season.STATE_SUMMER == current_season
|
|
|
|
def test_season_should_be_summer_northern_meteorological(self):
|
|
"""Test that season should be summer."""
|
|
# A known day in summer
|
|
summer_day = datetime(2017, 8, 13, 0, 0)
|
|
current_season = season.get_season(
|
|
summer_day, season.NORTHERN, season.TYPE_METEOROLOGICAL
|
|
)
|
|
assert season.STATE_SUMMER == current_season
|
|
|
|
def test_season_should_be_autumn_northern_astronomical(self):
|
|
"""Test that season should be autumn."""
|
|
# A known day in autumn
|
|
autumn_day = datetime(2017, 9, 23, 0, 0)
|
|
current_season = season.get_season(
|
|
autumn_day, season.NORTHERN, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert season.STATE_AUTUMN == current_season
|
|
|
|
def test_season_should_be_autumn_northern_meteorological(self):
|
|
"""Test that season should be autumn."""
|
|
# A known day in autumn
|
|
autumn_day = datetime(2017, 9, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
autumn_day, season.NORTHERN, season.TYPE_METEOROLOGICAL
|
|
)
|
|
assert season.STATE_AUTUMN == current_season
|
|
|
|
def test_season_should_be_winter_northern_astronomical(self):
|
|
"""Test that season should be winter."""
|
|
# A known day in winter
|
|
winter_day = datetime(2017, 12, 25, 0, 0)
|
|
current_season = season.get_season(
|
|
winter_day, season.NORTHERN, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert season.STATE_WINTER == current_season
|
|
|
|
def test_season_should_be_winter_northern_meteorological(self):
|
|
"""Test that season should be winter."""
|
|
# A known day in winter
|
|
winter_day = datetime(2017, 12, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
winter_day, season.NORTHERN, season.TYPE_METEOROLOGICAL
|
|
)
|
|
assert season.STATE_WINTER == current_season
|
|
|
|
def test_season_should_be_spring_northern_astronomical(self):
|
|
"""Test that season should be spring."""
|
|
# A known day in spring
|
|
spring_day = datetime(2017, 4, 1, 0, 0)
|
|
current_season = season.get_season(
|
|
spring_day, season.NORTHERN, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert season.STATE_SPRING == current_season
|
|
|
|
def test_season_should_be_spring_northern_meteorological(self):
|
|
"""Test that season should be spring."""
|
|
# A known day in spring
|
|
spring_day = datetime(2017, 3, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
spring_day, season.NORTHERN, season.TYPE_METEOROLOGICAL
|
|
)
|
|
assert season.STATE_SPRING == current_season
|
|
|
|
def test_season_should_be_winter_southern_astronomical(self):
|
|
"""Test that season should be winter."""
|
|
# A known day in winter
|
|
winter_day = datetime(2017, 9, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
winter_day, season.SOUTHERN, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert season.STATE_WINTER == current_season
|
|
|
|
def test_season_should_be_winter_southern_meteorological(self):
|
|
"""Test that season should be winter."""
|
|
# A known day in winter
|
|
winter_day = datetime(2017, 8, 13, 0, 0)
|
|
current_season = season.get_season(
|
|
winter_day, season.SOUTHERN, season.TYPE_METEOROLOGICAL
|
|
)
|
|
assert season.STATE_WINTER == current_season
|
|
|
|
def test_season_should_be_spring_southern_astronomical(self):
|
|
"""Test that season should be spring."""
|
|
# A known day in spring
|
|
spring_day = datetime(2017, 9, 23, 0, 0)
|
|
current_season = season.get_season(
|
|
spring_day, season.SOUTHERN, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert season.STATE_SPRING == current_season
|
|
|
|
def test_season_should_be_spring_southern_meteorological(self):
|
|
"""Test that season should be spring."""
|
|
# A known day in spring
|
|
spring_day = datetime(2017, 9, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
spring_day, season.SOUTHERN, season.TYPE_METEOROLOGICAL
|
|
)
|
|
assert season.STATE_SPRING == current_season
|
|
|
|
def test_season_should_be_summer_southern_astronomical(self):
|
|
"""Test that season should be summer."""
|
|
# A known day in summer
|
|
summer_day = datetime(2017, 12, 25, 0, 0)
|
|
current_season = season.get_season(
|
|
summer_day, season.SOUTHERN, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert season.STATE_SUMMER == current_season
|
|
|
|
def test_season_should_be_summer_southern_meteorological(self):
|
|
"""Test that season should be summer."""
|
|
# A known day in summer
|
|
summer_day = datetime(2017, 12, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
summer_day, season.SOUTHERN, season.TYPE_METEOROLOGICAL
|
|
)
|
|
assert season.STATE_SUMMER == current_season
|
|
|
|
def test_season_should_be_autumn_southern_astronomical(self):
|
|
"""Test that season should be spring."""
|
|
# A known day in spring
|
|
autumn_day = datetime(2017, 4, 1, 0, 0)
|
|
current_season = season.get_season(
|
|
autumn_day, season.SOUTHERN, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert season.STATE_AUTUMN == current_season
|
|
|
|
def test_season_should_be_autumn_southern_meteorological(self):
|
|
"""Test that season should be autumn."""
|
|
# A known day in autumn
|
|
autumn_day = datetime(2017, 3, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
autumn_day, season.SOUTHERN, season.TYPE_METEOROLOGICAL
|
|
)
|
|
assert season.STATE_AUTUMN == current_season
|
|
|
|
def test_on_equator_results_in_none(self):
|
|
"""Test that season should be unknown."""
|
|
# A known day in summer if astronomical and northern
|
|
summer_day = datetime(2017, 9, 3, 0, 0)
|
|
current_season = season.get_season(
|
|
summer_day, season.EQUATOR, season.TYPE_ASTRONOMICAL
|
|
)
|
|
assert current_season is None
|
|
|
|
def test_setup_hemisphere_northern(self):
|
|
"""Test platform setup of northern hemisphere."""
|
|
self.hass.config.latitude = HEMISPHERE_NORTHERN["homeassistant"]["latitude"]
|
|
assert setup_component(self.hass, "sensor", HEMISPHERE_NORTHERN)
|
|
assert (
|
|
self.hass.config.as_dict()["latitude"]
|
|
== HEMISPHERE_NORTHERN["homeassistant"]["latitude"]
|
|
)
|
|
state = self.hass.states.get("sensor.season")
|
|
assert state.attributes.get("friendly_name") == "Season"
|
|
|
|
def test_setup_hemisphere_southern(self):
|
|
"""Test platform setup of southern hemisphere."""
|
|
self.hass.config.latitude = HEMISPHERE_SOUTHERN["homeassistant"]["latitude"]
|
|
assert setup_component(self.hass, "sensor", HEMISPHERE_SOUTHERN)
|
|
assert (
|
|
self.hass.config.as_dict()["latitude"]
|
|
== HEMISPHERE_SOUTHERN["homeassistant"]["latitude"]
|
|
)
|
|
state = self.hass.states.get("sensor.season")
|
|
assert state.attributes.get("friendly_name") == "Season"
|
|
|
|
def test_setup_hemisphere_equator(self):
|
|
"""Test platform setup of equator."""
|
|
self.hass.config.latitude = HEMISPHERE_EQUATOR["homeassistant"]["latitude"]
|
|
assert setup_component(self.hass, "sensor", HEMISPHERE_EQUATOR)
|
|
assert (
|
|
self.hass.config.as_dict()["latitude"]
|
|
== HEMISPHERE_EQUATOR["homeassistant"]["latitude"]
|
|
)
|
|
state = self.hass.states.get("sensor.season")
|
|
assert state.attributes.get("friendly_name") == "Season"
|
|
|
|
def test_setup_hemisphere_empty(self):
|
|
"""Test platform setup of missing latlong."""
|
|
self.hass.config.latitude = None
|
|
assert setup_component(self.hass, "sensor", HEMISPHERE_EMPTY)
|
|
assert self.hass.config.as_dict()["latitude"] is None
|