From c9976718d4edafc7acbb099dc86226d9cb442253 Mon Sep 17 00:00:00 2001 From: Tsvi Mostovicz Date: Thu, 4 Oct 2018 16:51:56 +0300 Subject: [PATCH] Take timezone into consideration when calulating Zmanim. Partial fix for #16946 (#17131) --- .../components/sensor/jewish_calendar.py | 9 +++-- .../components/sensor/test_jewish_calendar.py | 37 ++++++++++++++++--- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/sensor/jewish_calendar.py b/homeassistant/components/sensor/jewish_calendar.py index d78f007f22b..1de45d6145e 100644 --- a/homeassistant/components/sensor/jewish_calendar.py +++ b/homeassistant/components/sensor/jewish_calendar.py @@ -64,7 +64,8 @@ async def async_setup_platform( dev = [] for sensor_type in config[CONF_SENSORS]: dev.append(JewishCalSensor( - name, language, sensor_type, latitude, longitude, diaspora)) + name, language, sensor_type, latitude, longitude, + hass.config.time_zone, diaspora)) async_add_entities(dev, True) @@ -72,7 +73,8 @@ class JewishCalSensor(Entity): """Representation of an Jewish calendar sensor.""" def __init__( - self, name, language, sensor_type, latitude, longitude, diaspora): + self, name, language, sensor_type, latitude, longitude, timezone, + diaspora): """Initialize the Jewish calendar sensor.""" self.client_name = name self._name = SENSOR_TYPES[sensor_type][0] @@ -81,6 +83,7 @@ class JewishCalSensor(Entity): self._state = None self.latitude = latitude self.longitude = longitude + self.timezone = timezone self.diaspora = diaspora _LOGGER.debug("Sensor %s initialized", self.type) @@ -131,7 +134,7 @@ class JewishCalSensor(Entity): else: times = hdate.Zmanim( date=today, latitude=self.latitude, longitude=self.longitude, - hebrew=self._hebrew).zmanim + timezone=self.timezone, hebrew=self._hebrew).zmanim self._state = times[self.type].time() _LOGGER.debug("New value: %s", self._state) diff --git a/tests/components/sensor/test_jewish_calendar.py b/tests/components/sensor/test_jewish_calendar.py index e9a28f64cf9..b67e340a9aa 100644 --- a/tests/components/sensor/test_jewish_calendar.py +++ b/tests/components/sensor/test_jewish_calendar.py @@ -1,5 +1,6 @@ """The tests for the Jewish calendar sensor platform.""" import unittest +from datetime import time from datetime import datetime as dt from unittest.mock import patch @@ -64,7 +65,7 @@ class TestJewishCalenderSensor(unittest.TestCase): sensor = JewishCalSensor( name='test', language='english', sensor_type='date', latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, - diaspora=False) + timezone="UTC", diaspora=False) with patch('homeassistant.util.dt.now', return_value=test_time): run_coroutine_threadsafe( sensor.async_update(), @@ -77,7 +78,7 @@ class TestJewishCalenderSensor(unittest.TestCase): sensor = JewishCalSensor( name='test', language='hebrew', sensor_type='date', latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, - diaspora=False) + timezone="UTC", diaspora=False) with patch('homeassistant.util.dt.now', return_value=test_time): run_coroutine_threadsafe( sensor.async_update(), self.hass.loop).result() @@ -89,7 +90,7 @@ class TestJewishCalenderSensor(unittest.TestCase): sensor = JewishCalSensor( name='test', language='hebrew', sensor_type='holiday_name', latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, - diaspora=False) + timezone="UTC", diaspora=False) with patch('homeassistant.util.dt.now', return_value=test_time): run_coroutine_threadsafe( sensor.async_update(), self.hass.loop).result() @@ -101,7 +102,7 @@ class TestJewishCalenderSensor(unittest.TestCase): sensor = JewishCalSensor( name='test', language='english', sensor_type='holiday_name', latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, - diaspora=False) + timezone="UTC", diaspora=False) with patch('homeassistant.util.dt.now', return_value=test_time): run_coroutine_threadsafe( sensor.async_update(), self.hass.loop).result() @@ -113,7 +114,7 @@ class TestJewishCalenderSensor(unittest.TestCase): sensor = JewishCalSensor( name='test', language='hebrew', sensor_type='holyness', latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, - diaspora=False) + timezone="UTC", diaspora=False) with patch('homeassistant.util.dt.now', return_value=test_time): run_coroutine_threadsafe( sensor.async_update(), self.hass.loop).result() @@ -125,8 +126,32 @@ class TestJewishCalenderSensor(unittest.TestCase): sensor = JewishCalSensor( name='test', language='hebrew', sensor_type='weekly_portion', latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, - diaspora=False) + timezone="UTC", diaspora=False) with patch('homeassistant.util.dt.now', return_value=test_time): run_coroutine_threadsafe( sensor.async_update(), self.hass.loop).result() self.assertEqual(sensor.state, "פרשת נצבים") + + def test_jewish_calendar_sensor_first_stars_ny(self): + """Test Jewish calendar sensor date output in hebrew.""" + test_time = dt(2018, 9, 8) + sensor = JewishCalSensor( + name='test', language='hebrew', sensor_type='first_stars', + latitude=40.7128, longitude=-74.0060, + timezone="America/New_York", diaspora=False) + with patch('homeassistant.util.dt.now', return_value=test_time): + run_coroutine_threadsafe( + sensor.async_update(), self.hass.loop).result() + self.assertEqual(sensor.state, time(19, 48)) + + def test_jewish_calendar_sensor_first_stars_jerusalem(self): + """Test Jewish calendar sensor date output in hebrew.""" + test_time = dt(2018, 9, 8) + sensor = JewishCalSensor( + name='test', language='hebrew', sensor_type='first_stars', + latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, + timezone="Asia/Jerusalem", diaspora=False) + with patch('homeassistant.util.dt.now', return_value=test_time): + run_coroutine_threadsafe( + sensor.async_update(), self.hass.loop).result() + self.assertEqual(sensor.state, time(19, 21))