def test_extract_workingdays(self): triggers = [{'SUNRISE': {'at': ['WORKINGDAY']}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(1, len(result)) self.assertEqual(Open.type(), result[0].task().type()) self.assertEqual(5, len(result[0]._on)) for day in result[0]._on: self.assertTrue(day in ['MO', 'TU', 'WE', 'TH', 'FR'], 'Day {} not in list {}'.format(day, result[0]._on))
def test_extract_sunout(self): triggers = ['SUNOUT', {'SUNOUT': {'task': 'TILT'}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(2, len(result)) self.assertEqual(Open.type(), result[0].task().type()) self.assertEqual(Tilt.type(), result[1].task().type()) for item in result: self.assertEqual(SunOutTrigger.type(), item.type()) self.assertEqual('2020-07-27T07:59:00+02:00', item.time().isoformat())
def test_extract_sunin(self): triggers = ['SUNIN', {'SUNIN': {'task': 'CLOSE'}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(2, len(result)) self.assertEqual(Tilt.type(), result[0].task().type()) self.assertEqual(Close.type(), result[1].task().type()) for item in result: self.assertEqual(SunInTrigger.type(), item.type()) self.assertEqual('2020-07-27T07:59:00+02:00', item.time().isoformat())
def test_applies_not(self): triggers = [{'SUNRISE': {'at': ['TU']}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(1, len(result)) self.assertEqual(Open.type(), result[0].task().type()) for item in result: self.assertEqual(SunriseTrigger.type(), item.type()) self.assertEqual('2020-07-27T05:59:00+02:00', item.time().isoformat()) self.assertFalse(item.applies())
def test_extract_time(self): dateutil.date.next() triggers = [{'TIME': {'task': 'CLOSE', 'time': '16:00:00'}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(1, len(result)) self.assertEqual(Close.type(), result[0].task().type()) for item in result: self.assertEqual(TimeTrigger.type(), item.type()) now = datetime.now(dateutil.zone) self.assertEqual(now.date().isoformat() + 'T16:00:00+02:00', item.time().isoformat())
def test_order(self): triggers = [{'TIME': {'time': '23:59:59'}}, {'TIME': {'time': '00:00:01'}}, 'SUNRISE', 'SUNOUT', 'SUNSET', 'SUNIN'] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(5, len(result)) self.assertEqual(TimeTrigger.type(), result[3].type()) now = datetime.now(dateutil.zone) self.assertEqual(now.date().isoformat() + 'T00:00:01+02:00', result[3].time().isoformat()) self.assertEqual(SunriseTrigger.type(), result[0].type()) self.assertEqual(SunInTrigger.type(), result[2].type()) self.assertEqual(SunOutTrigger.type(), result[1].type()) self.assertEqual(TimeTrigger.type(), result[4].type()) self.assertEqual(now.date().isoformat() + 'T23:59:59+02:00', result[4].time().isoformat())
def test_parallel_tasks_triggers_extract(self): blinds = [ Blind('A', 0, 0, TestDevice('A'), ['SUNRISE'], []), Blind('B', 0, 0, TestDevice('B'), ['SUNRISE'], []) ] api = SunAPIMock() api.fetch_sundata(None) for blind in blinds: triggers = trigger.extract_triggers(blind, api.sundata) print(triggers) manager.add(Job(triggers[0], blind)) print(manager) manager.prepare() print(manager) manager.run() self.assertEqual(1, blinds[1].device.counter, '{} was called'.format(blinds[1].name)) self.assertEqual(1, blinds[0].device.counter, '{} was called'.format(blinds[0].name))
def test_elevation_rise(self): triggers = [{'ELEVATION': {'elevation': 19, 'direction': 'RISE'}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(1, len(result)) self.assertEqual(ElevationTrigger.type(), result[0].type()) self.assertEqual('2020-07-27T07:59:00+02:00', result[0].time().isoformat())
def test_azimuth(self): triggers = [{'AZIMUTH': {'azimuth': 123}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(1, len(result)) self.assertEqual(AzimuthTrigger.type(), result[0].type()) self.assertEqual('2020-07-27T17:08:00+02:00', result[0].time().isoformat())
def test_offset_minus(self): triggers = [{'SUNOUT': {'offset': -8}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(1, len(result)) self.assertEqual(SunOutTrigger.type(), result[0].type()) self.assertEqual('2020-07-27T07:51:00+02:00', result[0].time().isoformat())
def test_no_match(self): triggers = ['YOLO', {'YOLO': {'task': 'OPEN'}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(0, len(result))
def test_position(self): triggers = [{'POSITION': {'azimuth': 123, 'elevation': 19, 'direction': 'RISE'}}] result = trigger.extract_triggers(blind(triggers), sundata()) self.assertEqual(1, len(result)) self.assertEqual(PositionTrigger.type(), result[0].type()) self.assertEqual('2020-07-27T17:08:00+02:00', result[0].time().isoformat())