def test_retrigger_delay(self): d1 = StateDevice() d2 = StateDevice(devices=d1, retrigger_delay={ Attribute.SECS: 2 }, name='tested') d3 = StateDevice(devices=d2) d1.off() self.assertEqual(d1.state, State.OFF) self.assertEqual(d2.state, State.OFF) self.assertEqual(d3.state, State.OFF) d1.on() self.assertEqual(d1.state, State.ON) self.assertEqual(d2.state, State.ON) self.assertEqual(d3.state, State.ON) d3.off() self.assertEqual(d3.state, State.OFF) # set on again, this time no delegation d1.on() self.assertEqual(d3.state, State.OFF) # after x amount of time allow dupes time.sleep(3) d1.on() self.assertEqual(d3.state, State.ON)
def test_delay_multiple(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice( devices=(d1, d2), delay=( {Attribute.COMMAND: (Command.OFF), Attribute.SOURCE: (d1), Attribute.SECS: 2, }, {Attribute.COMMAND: Command.OFF, Attribute.SOURCE: d2, Attribute.SECS: 4, }, ) ) self.assertEqual(d3.state, State.UNKNOWN) d3.on() self.assertEqual(d3.state, State.ON) d1.off() self.assertEqual(d3.state, State.ON) time.sleep(3) self.assertEqual(d3.state, State.OFF) #d2 d3.on() self.assertEqual(d3.state, State.ON) d2.off() self.assertEqual(d3.state, State.ON) time.sleep(3) self.assertEqual(d3.state, State.ON) time.sleep(1) self.assertEqual(d3.state, State.OFF)
def test_delay_zero_secs(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice( devices=(d1, d2), delay=({ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2 }, { Attribute.COMMAND: Command.OFF, Attribute.SECS: 0, Attribute.SOURCE: d2, } ), initial=State.ON, ) self.assertEqual(d3.state, State.ON) d1.off() self.assertEqual(d3.state, State.ON) time.sleep(3) self.assertEqual(d3.state, State.OFF) d3.on() self.assertEqual(d3.state, State.ON) d2.off() self.assertEqual(d3.state, State.OFF)
def test_onStateChanged(self): s1 = StateDevice() custom = Mock() s1.on() s1.onStateChanged(custom.method) s1.off() custom.method.assert_called_with(State.OFF, source=None, prev=State.ON)
def test_binding_default(self): d1 = StateDevice() d1.off() d2 = StateDevice(d1) self.assertEqual(d2.state, State.OFF) d1.on() self.assertEqual(d2.state, State.ON)
def test_delay_priority(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice( devices=(d1, d2), delay=( { Attribute.COMMAND: Command.OFF, Attribute.SOURCE: d1, Attribute.SECS: 4, }, { Attribute.COMMAND: Command.OFF, Attribute.SECS: 2 }, ), initial=State.ON, ) self.assertEqual(d3.state, State.ON) d1.off() self.assertEqual(d3.state, State.ON) time.sleep(2) self.assertEqual(d3.state, State.ON) time.sleep(2) self.assertEqual(d3.state, State.OFF)
def test_delay_multiple(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice(devices=(d1, d2), delay=( { Attribute.COMMAND: (Command.OFF), Attribute.SOURCE: (d1), Attribute.SECS: 2, }, { Attribute.COMMAND: Command.OFF, Attribute.SOURCE: d2, Attribute.SECS: 4, }, )) self.assertEqual(d3.state, State.UNKNOWN) d3.on() self.assertEqual(d3.state, State.ON) d1.off() self.assertEqual(d3.state, State.ON) time.sleep(3) self.assertEqual(d3.state, State.OFF) #d2 d3.on() self.assertEqual(d3.state, State.ON) d2.off() self.assertEqual(d3.state, State.ON) time.sleep(3) self.assertEqual(d3.state, State.ON) time.sleep(1) self.assertEqual(d3.state, State.OFF)
def test_last_command(self): s1 = StateDevice() s1.on() self.assertEqual(s1.state, State.ON) s1.off() self.assertEqual(s1.state, State.OFF) self.assertEqual(s1.last_command, Command.OFF)
def test_device_on(self): d=StateDevice(name='device_test_1') d.off() self.assertEqual(d.state, State.OFF) response = self.api.get_response(method='POST', path="device/" + str(d.type_id), data=['command=on']) self.assertEqual(d.state, State.ON) self.assertTrue('"name": "device_test_1"' in response)
def test_previous_state_command(self): s1 = StateDevice() s1.on() self.assertEqual(s1.state, State.ON) s1.off() self.assertEqual(s1.state, State.OFF) s1.previous() self.assertEqual(s1.state, State.ON)
def test_onStateChangedGlobal(self): s1 = StateDevice() custom = Mock() s1.on() StateDevice.test_onStateChangedGlobal(custom.method) s1.off() custom.method.assert_called_with(State.OFF, source=None, prev=State.ON, device=s1)
def test_ignore_multi_command(self): s1 = StateDevice() s2 = StateDevice(devices=s1, ignore={ Attribute.COMMAND: (Command.ON, Command.OFF,) }, ) self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.UNKNOWN)
def test_delay_single(self): d1 = StateDevice(delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2, }) self.assertEqual(d1.state, State.UNKNOWN) d1.on() self.assertEqual(d1.state, State.ON) d1.off() self.assertEqual(d1.state, State.ON) time.sleep(3) # time.sleep(20000) self.assertEqual(d1.state, State.OFF)
def test_ignore_multiples_state(self): s1 = StateDevice() s2 = StateDevice( devices=s1, ignore={Attribute.COMMAND: (Command.ON, Command.OFF)}, ) self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN)
def test_ignore_state(self): s1 = StateDevice() s2 = StateDevice(s1) s1.on() self.assertEqual(s2.state, State.ON) s1.off() self.assertEqual(s2.state, State.OFF) s2.ignore_on() s1.on() self.assertEqual(s2.state, State.OFF) s2.ignore_on(False) s1.on() self.assertEqual(s2.state, State.ON)
def test_ignore_state(self): s1 = StateDevice() s2 = StateDevice(devices = s1, ignore={ Attribute.COMMAND: Command.ON, Attribute.SOURCE: s1, }, ) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.OFF)
def test_delay_single(self): d1 = StateDevice( delay={Attribute.COMMAND: Command.OFF, Attribute.SECS: 2, } ) self.assertEqual(d1.state, State.UNKNOWN) d1.on() self.assertEqual(d1.state, State.ON) d1.off() self.assertEqual(d1.state, State.ON) time.sleep(3) # time.sleep(20000) self.assertEqual(d1.state, State.OFF)
def test_delay_single(self): d1 = StateDevice( delay={'command': Command.OFF, 'secs': 2, } ) self.assertEqual(d1.state, State.UNKNOWN) d1.on() self.assertEqual(d1.state, State.ON) d1.off() self.assertEqual(d1.state, State.ON) time.sleep(3) # time.sleep(20000) self.assertEqual(d1.state, State.OFF)
def test_ignore_state(self): s1 = StateDevice() s2 = StateDevice(devices = s1, ignore={ 'command': Command.ON, 'source:': s1, }, ) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.OFF)
def test_ignore_state(self): s1 = StateDevice() s2 = StateDevice( devices=s1, ignore={ Attribute.COMMAND: Command.ON, Attribute.SOURCE: s1, }, ) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.OFF)
def test_controlled_devices_no_delay_default(self): i = Mock() d1 = StateDevice() d2 = InterfaceDevice( devices=(i, d1), delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 3 }, initial=State.ON, ) d1.off() self.assertEqual(d2.state, State.ON) d2.command(command=Command.OFF, source=i) self.assertEqual(d2.state, State.OFF)
def test_controlled_devices_no_delay_default(self): i = Mock() d1 = StateDevice() d2 = InterfaceDevice( devices=(i,d1), delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 3 }, initial=State.ON, ) d1.off() self.assertEqual(d2.state, State.ON) d2.command(command=Command.OFF, source=i) self.assertEqual(d2.state, State.OFF)
def test_state_remove_device(self): s1 = StateDevice() s2 = StateDevice(devices=s1) s1.on() self.assertEqual(s2.state, State.ON) s2.off() self.assertEqual(s2.state, State.OFF) r = s2.remove_device(s1) self.assertTrue(r) self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.OFF) # remove again and not error r = s2.remove_device(s1) self.assertFalse(r)
def test_state_remove_device(self): s1 = StateDevice() s2 = StateDevice(devices=s1) s1.on() self.assertEqual(s2.state, State.ON) s2.off() self.assertEqual(s2.state, State.OFF) r=s2.remove_device(s1) self.assertTrue(r) self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.OFF) # remove again and not error r = s2.remove_device(s1) self.assertFalse(r)
def test_delay(self): d1 = StateDevice() d2 = StateDevice(devices=d1, delay={'command': Command.OFF, 'mapped': (Command.LEVEL, 80), 'source': d1, 'secs': 2, }) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) d1.off() self.assertEqual(d2.state, State.ON) time.sleep(3) # time.sleep(2000) self.assertEqual(d2.state, (State.LEVEL, 80))
def test_delay(self): d1 = StateDevice() d2 = StateDevice(devices=d1, delay={Attribute.COMMAND: Command.OFF, Attribute.MAPPED: (Command.LEVEL, 80), Attribute.SOURCE: d1, Attribute.SECS: 2, }) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) d1.off() self.assertEqual(d2.state, State.ON) time.sleep(3) # time.sleep(2000) self.assertEqual(d2.state, (State.LEVEL, 80))
def test_restriction_specific_state(self): # Dark = ON # light = OFF sr = StateDevice() s2 = StateDevice(devices=(sr), restriction={ Attribute.SOURCE: sr, Attribute.STATE: State.OFF, Attribute.TARGET: Command.ON, }) # Restrict sr.on() self.assertEqual(State.ON, s2.state) sr.off() self.assertEqual(State.OFF, s2.state)
def test_delay(self): d1 = StateDevice() d2 = StateDevice(devices=d1, delay={ Attribute.COMMAND: Command.OFF, Attribute.MAPPED: (Command.LEVEL, 80), Attribute.SOURCE: d1, Attribute.SECS: 2, }) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) d1.off() self.assertEqual(d2.state, State.ON) time.sleep(3) # time.sleep(2000) self.assertEqual(d2.state, (State.LEVEL, 80))
def test_delay_no_retrigger(self): d1 = StateDevice(trigger={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 3}, delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 3}, ) d1.on() self.assertEqual(d1.state, State.ON) d1.off() self.assertEqual(d1.state, State.ON) time.sleep(2) d1.off() time.sleep(1) self.assertEqual(d1.state, State.OFF)
def test_delay_cancel_on_other_state(self): d1 = StateDevice() d2 = StateDevice(devices=d1, initial=State.OFF, delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2, }, ) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) d1.off() self.assertEqual(d2.state, State.ON) d1.on() self.assertEqual(d2.state, State.ON) time.sleep(3) self.assertEqual(d2.state, State.ON)
def test_ignore_multiple_state(self): s1 = StateDevice() s2 = StateDevice(devices = s1, ignore=({ Attribute.COMMAND: Command.ON, }, { Attribute.COMMAND: Command.OFF, } ), ) self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN)
def test_restriction_specific_state(self): # Dark = ON # light = OFF sr = StateDevice() s2 = StateDevice( devices=(sr), restriction={ Attribute.SOURCE: sr, Attribute.STATE: State.OFF, Attribute.TARGET: Command.ON, } ) # Restrict sr.on() self.assertEqual(State.ON, s2.state) sr.off() self.assertEqual(State.OFF, s2.state)
def test_idle_source(self): s1 = StateDevice() s2 = StateDevice() s1.off() s2.off() s3 = StateDevice(devices=(s1, s2), idle={ Attribute.MAPPED: State.OFF, Attribute.SECS: 2, Attribute.SOURCE: s2 }) s1.on() self.assertEqual(s3.state, State.ON) time.sleep(3) self.assertEqual(s3.state, State.ON) s2.on() self.assertEqual(s3.state, State.ON) time.sleep(3) self.assertEqual(s3.state, State.OFF)
def test_manual_state(self): d1 = StateDevice() d2 = StateDevice(devices=d1, delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2 }, ) d2.on() self.assertEqual(d2.state, State.ON) d2.manual() d2.off() self.assertEqual(d2.state, State.OFF) d2.on() d2.automatic() d2.off() self.assertEqual(d2.state, State.ON) time.sleep(3) self.assertEqual(d2.state, State.OFF)
def test_delay_cancel_on_other_state(self): d1 = StateDevice() d2 = StateDevice( devices=d1, initial=State.OFF, delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2, }, ) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) d1.off() self.assertEqual(d2.state, State.ON) d1.on() self.assertEqual(d2.state, State.ON) time.sleep(3) self.assertEqual(d2.state, State.ON)
def test_idle_source(self): s1 = StateDevice() s2 = StateDevice() s1.off() s2.off() s3 = StateDevice(devices=(s1, s2), idle={ Attribute.MAPPED: State.OFF, Attribute.SECS: 2, Attribute.SOURCE: s2 } ) s1.on() self.assertEqual(s3.state, State.ON) time.sleep(3) self.assertEqual(s3.state, State.ON) s2.on() self.assertEqual(s3.state, State.ON) time.sleep(3) self.assertEqual(s3.state, State.OFF)
def test_delay_no_retrigger(self): d1 = StateDevice( trigger={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 3 }, delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 3 }, ) d1.on() self.assertEqual(d1.state, State.ON) d1.off() self.assertEqual(d1.state, State.ON) time.sleep(2) d1.off() time.sleep(1) self.assertEqual(d1.state, State.OFF)
def test_manual_state(self): d1 = StateDevice() d2 = StateDevice( devices=d1, delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2 }, ) d2.on() self.assertEqual(d2.state, State.ON) d2.manual() d2.off() self.assertEqual(d2.state, State.OFF) d2.on() d2.automatic() d2.off() self.assertEqual(d2.state, State.ON) time.sleep(3) self.assertEqual(d2.state, State.OFF)
def test_changes_only(self): d1 = StateDevice() d2 = StateDevice(devices=d1, changes_only=True, name='tested') d3 = StateDevice(devices=d2) d1.off() self.assertEqual(d1.state, State.OFF) self.assertEqual(d2.state, State.OFF) self.assertEqual(d3.state, State.OFF) d1.on() self.assertEqual(d1.state, State.ON) self.assertEqual(d2.state, State.ON) self.assertEqual(d3.state, State.ON) d3.off() self.assertEqual(d3.state, State.OFF) # set on again, this time no delegation d1.on() self.assertEqual(d3.state, State.OFF) # after x amount of time still prevent dupes time.sleep(3) d1.on() self.assertEqual(d3.state, State.OFF)
def test_delay_multiple_source(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice() d4 = StateDevice( devices=(d1, d2, d3), delay={ Attribute.COMMAND: Command.OFF, Attribute.SOURCE: (d1, d2), Attribute.SECS: 2, }, ) d1.on() self.assertEqual(d4.state, State.ON) d1.off() self.assertEqual(d4.state, State.ON) time.sleep(3) self.assertEqual(d4.state, State.OFF) d3.on() self.assertEqual(d4.state, State.ON) d3.off() self.assertEqual(d4.state, State.OFF)
def test_retrigger_delay(self): d1 = StateDevice() d2 = StateDevice(devices=d1, retrigger_delay={Attribute.SECS: 2}, name='tested') d3 = StateDevice(devices=d2) d1.off() self.assertEqual(d1.state, State.OFF) self.assertEqual(d2.state, State.OFF) self.assertEqual(d3.state, State.OFF) d1.on() self.assertEqual(d1.state, State.ON) self.assertEqual(d2.state, State.ON) self.assertEqual(d3.state, State.ON) d3.off() self.assertEqual(d3.state, State.OFF) # set on again, this time no delegation d1.on() self.assertEqual(d3.state, State.OFF) # after x amount of time allow dupes time.sleep(3) d1.on() self.assertEqual(d3.state, State.ON)
def test_delay_zero_secs(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice( devices=(d1, d2), delay=({ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2 }, { Attribute.COMMAND: Command.OFF, Attribute.SECS: 0, Attribute.SOURCE: d2, }), initial=State.ON, ) self.assertEqual(d3.state, State.ON) d1.off() self.assertEqual(d3.state, State.ON) time.sleep(3) self.assertEqual(d3.state, State.OFF) d3.on() self.assertEqual(d3.state, State.ON) d2.off() self.assertEqual(d3.state, State.OFF)
def test_delay_priority(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice( devices=(d1,d2), delay=({ Attribute.COMMAND: Command.OFF, Attribute.SOURCE: d1, Attribute.SECS: 4, }, { Attribute.COMMAND: Command.OFF, Attribute.SECS: 2 }, ), initial=State.ON, ) self.assertEqual(d3.state, State.ON) d1.off() self.assertEqual(d3.state, State.ON) time.sleep(2) self.assertEqual(d3.state, State.ON) time.sleep(2) self.assertEqual(d3.state, State.OFF)
def test_restriction(self): sr = StateDevice() s1 = StateDevice() s2 = StateDevice(devices=(s1), restriction={ Attribute.SOURCE: sr, Attribute.STATE: State.ON, }) self.assertEqual(State.UNKNOWN, s2.state) s1.on() self.assertEqual(State.ON, s2.state) s1.off() self.assertEqual(State.OFF, s2.state) # Restrict sr.on() s1.on() self.assertEqual(State.OFF, s2.state) s1.off() sr.off() s1.on() self.assertEqual(State.ON, s2.state)
def test_restriction(self): sr = StateDevice() s1 = StateDevice() s2 = StateDevice( devices=(s1), restriction={ Attribute.SOURCE: sr, Attribute.STATE: State.ON, } ) self.assertEqual(State.UNKNOWN, s2.state) s1.on() self.assertEqual(State.ON, s2.state) s1.off() self.assertEqual(State.OFF, s2.state) # Restrict sr.on() s1.on() self.assertEqual(State.OFF, s2.state) s1.off() sr.off() s1.on() self.assertEqual(State.ON, s2.state)
class StateDevice_Tests(TestCase): def setUp(self): self.interface = Mock() self.device = StateDevice() def test_instantiation(self): self.assertIsNotNone(self.device, 'HADevice could not be instantiated') def test_instances(self): prev = len(self.device.instances) device = StateDevice() self.assertTrue(len(device.instances) > prev) def test_idle_property(self): self.device.on() time.sleep(2) self.assertTrue(self.device.idle >= 2) def test_on(self): self.assertEqual(self.device.state, self.device.UNKNOWN) self.device.on() self.assertEqual(self.device.state, self.device.ON) def test_on_off(self): callback_obj = Mock() self.device.on_off(callback_obj.callback) self.device.off() self.assertTrue(callback_obj.callback.called) callback_obj.callback.assert_called_once_with(state=self.device.OFF, previous_state=self.device.UNKNOWN, source=self.device) # def test_time_on(self): # now = datetime.now() # hours, mins, secs = now.timetuple()[3:6] # secs = (secs + 2) % 60 # mins += (secs + 2) / 60 # trigger_time = '{h}:{m}:{s}'.format( # h=hours, # m=mins, # s=secs, # ) # print 'Trigger Time' + trigger_time # self.device.time_on(trigger_time) # time.sleep(4) # self.assertEqual(self.device.state, self.device.ON) def test_time_on_multiple(self): now = datetime.now() hours, mins, secs = now.timetuple()[3:6] secs = (secs + 2) % 60 mins += (secs + 2) / 60 trigger_time = '{h}:{m}:{s}'.format( h=hours, m=mins, s=secs, ) print 'Trigger Time' + trigger_time self.device.time_on(trigger_time) hours, mins, secs = now.timetuple()[3:6] secs = (secs + 5) % 60 mins += (secs + 5) / 60 trigger_time = '{h}:{m}:{s}'.format( h=hours, m=mins, s=secs, ) print 'Trigger Time2' + trigger_time self.device.time_on(trigger_time) time.sleep(4) print datetime.now() self.assertEqual(self.device.state, self.device.ON) self.device.off() self.assertEqual(self.device.state, self.device.OFF) time.sleep(3) print datetime.now() self.assertEqual(self.device.state, self.device.ON) def test_bind_devices(self): s2 = StateDevice(self.device) self.device.on() self.assertIsNotNone(s2) def test_bind_devices_initial_state(self): s1 = StateDevice() self.assertEqual(s1.state, State.UNKNOWN) s1.on() self.assertEqual(s1.state, State.ON) s2 = StateDevice(s1) self.assertEqual(s2.state, State.ON) s3 = StateDevice(s1, initial_state=State.OFF) self.assertEqual(s3.state, State.OFF) def test_invalid_state(self): try: self.device.invalid_state() except AttributeError, ex: return except TypeError, ex: return