def test_bad_template(self): """Test Exception when the template cannot be parsed.""" bad = Template('{{ x - 12 }}', self.hass) # x is undefined duration = '01:00' sensor1 = HistoryStatsSensor( self.hass, 'test', 'on', bad, None, duration, 'time', 'Test') sensor2 = HistoryStatsSensor( self.hass, 'test', 'on', None, bad, duration, 'time', 'Test') before_update1 = sensor1._period before_update2 = sensor2._period sensor1.update_period() sensor2.update_period() assert before_update1 == sensor1._period assert before_update2 == sensor2._period
def test_wrong_date(self): """Test when start or end value is not a timestamp or a date.""" good = Template('{{ now() }}', self.hass) bad = Template('{{ TEST }}', self.hass) sensor1 = HistoryStatsSensor( self.hass, 'test', 'on', good, bad, None, 'time', 'Test') sensor2 = HistoryStatsSensor( self.hass, 'test', 'on', bad, good, None, 'time', 'Test') before_update1 = sensor1._period before_update2 = sensor2._period sensor1.update_period() sensor2.update_period() assert before_update1 == sensor1._period assert before_update2 == sensor2._period
def test_period_parsing(self): """Test the conversion from templates to period.""" now = datetime(2019, 1, 1, 23, 30, 0, tzinfo=pytz.utc) with patch.dict(template.ENV.globals, {'now': lambda: now}): today = Template('{{ now().replace(hour=0).replace(minute=0)' '.replace(second=0) }}', self.hass) duration = timedelta(hours=2, minutes=1) sensor1 = HistoryStatsSensor( self.hass, 'test', 'on', today, None, duration, 'time', 'test') sensor2 = HistoryStatsSensor( self.hass, 'test', 'on', None, today, duration, 'time', 'test') sensor1.update_period() sensor1_start, sensor1_end = sensor1._period sensor2.update_period() sensor2_start, sensor2_end = sensor2._period # Start = 00:00:00 assert sensor1_start.hour == 0 assert sensor1_start.minute == 0 assert sensor1_start.second == 0 # End = 02:01:00 assert sensor1_end.hour == 2 assert sensor1_end.minute == 1 assert sensor1_end.second == 0 # Start = 21:59:00 assert sensor2_start.hour == 21 assert sensor2_start.minute == 59 assert sensor2_start.second == 0 # End = 00:00:00 assert sensor2_end.hour == 0 assert sensor2_end.minute == 0 assert sensor2_end.second == 0
def test_measure(self): """Test the history statistics sensor measure.""" t0 = dt_util.utcnow() - timedelta(minutes=40) t1 = t0 + timedelta(minutes=20) t2 = dt_util.utcnow() - timedelta(minutes=10) # Start t0 t1 t2 End # |--20min--|--20min--|--10min--|--10min--| # |---off---|---on----|---off---|---on----| fake_states = { 'binary_sensor.test_id': [ ha.State('binary_sensor.test_id', 'on', last_changed=t0), ha.State('binary_sensor.test_id', 'off', last_changed=t1), ha.State('binary_sensor.test_id', 'on', last_changed=t2), ] } start = Template('{{ as_timestamp(now()) - 3600 }}', self.hass) end = Template('{{ now() }}', self.hass) sensor1 = HistoryStatsSensor( self.hass, 'binary_sensor.test_id', 'on', start, end, None, 'time', 'Test') sensor2 = HistoryStatsSensor( self.hass, 'unknown.id', 'on', start, end, None, 'time', 'Test') sensor3 = HistoryStatsSensor( self.hass, 'binary_sensor.test_id', 'on', start, end, None, 'count', 'test') sensor4 = HistoryStatsSensor( self.hass, 'binary_sensor.test_id', 'on', start, end, None, 'ratio', 'test') assert sensor1._type == 'time' assert sensor3._type == 'count' assert sensor4._type == 'ratio' with patch('homeassistant.components.history.' 'state_changes_during_period', return_value=fake_states): with patch('homeassistant.components.history.get_state', return_value=None): sensor1.update() sensor2.update() sensor3.update() sensor4.update() assert sensor1.state == 0.5 assert sensor2.state is None assert sensor3.state == 2 assert sensor4.state == 50
def test_measure(self): """Test the history statistics sensor measure.""" t0 = dt_util.utcnow() - timedelta(minutes=40) t1 = t0 + timedelta(minutes=20) t2 = dt_util.utcnow() - timedelta(minutes=10) # Start t0 t1 t2 End # |--20min--|--20min--|--10min--|--10min--| # |---off---|---on----|---off---|---on----| fake_states = { 'binary_sensor.test_id': [ ha.State('binary_sensor.test_id', 'on', last_changed=t0), ha.State('binary_sensor.test_id', 'off', last_changed=t1), ha.State('binary_sensor.test_id', 'on', last_changed=t2), ] } start = Template('{{ as_timestamp(now()) - 3600 }}', self.hass) end = Template('{{ now() }}', self.hass) sensor1 = HistoryStatsSensor(self.hass, 'binary_sensor.test_id', 'on', start, end, None, 'time', 'Test') sensor2 = HistoryStatsSensor(self.hass, 'unknown.id', 'on', start, end, None, 'time', 'Test') sensor3 = HistoryStatsSensor(self.hass, 'binary_sensor.test_id', 'on', start, end, None, 'count', 'test') sensor4 = HistoryStatsSensor(self.hass, 'binary_sensor.test_id', 'on', start, end, None, 'ratio', 'test') assert sensor1._type == 'time' assert sensor3._type == 'count' assert sensor4._type == 'ratio' with patch( 'homeassistant.components.history.' 'state_changes_during_period', return_value=fake_states): with patch('homeassistant.components.history.get_state', return_value=None): sensor1.update() sensor2.update() sensor3.update() sensor4.update() assert sensor1.state == 0.5 assert sensor2.state is None assert sensor3.state == 2 assert sensor4.state == 50
def test_measure(self): """Test the history statistics sensor measure.""" t0 = dt_util.utcnow() - timedelta(minutes=40) t1 = t0 + timedelta(minutes=20) t2 = dt_util.utcnow() - timedelta(minutes=10) # Start t0 t1 t2 End # |--20min--|--20min--|--10min--|--10min--| # |---off---|---on----|---off---|---on----| fake_states = { "binary_sensor.test_id": [ ha.State("binary_sensor.test_id", "on", last_changed=t0), ha.State("binary_sensor.test_id", "off", last_changed=t1), ha.State("binary_sensor.test_id", "on", last_changed=t2), ] } start = Template("{{ as_timestamp(now()) - 3600 }}", self.hass) end = Template("{{ now() }}", self.hass) sensor1 = HistoryStatsSensor(self.hass, "binary_sensor.test_id", "on", start, end, None, "time", "Test") sensor2 = HistoryStatsSensor(self.hass, "unknown.id", "on", start, end, None, "time", "Test") sensor3 = HistoryStatsSensor(self.hass, "binary_sensor.test_id", "on", start, end, None, "count", "test") sensor4 = HistoryStatsSensor(self.hass, "binary_sensor.test_id", "on", start, end, None, "ratio", "test") assert sensor1._type == "time" assert sensor3._type == "count" assert sensor4._type == "ratio" with patch( "homeassistant.components.history.state_changes_during_period", return_value=fake_states, ): with patch("homeassistant.components.history.get_state", return_value=None): sensor1.update() sensor2.update() sensor3.update() sensor4.update() assert sensor1.state == 0.5 assert sensor2.state is None assert sensor3.state == 2 assert sensor4.state == 50