def test_write_characteristic_read_only(self): accessories = Accessories() result = asyncio.get_event_loop().run_until_complete( accessories.write_characteristic([{ 'aid': 1, 'iid': 2, 'value': 'test_value' }])) self.assertEqual(result, [{ 'aid': 1, 'iid': 2, 'status': -70404, }])
def test_write_characteristic(self): accessory = Accessory(name='PyHAP', model='PyHAP1,1', manufacturer='PyHAP', hardware_revision='0') service = LightbulbService() bool_characteristic = On(False) int_characteristic = Brightness(8) float_characteristic = Hue(5.0) service.add_characteristic(bool_characteristic) service.add_characteristic(int_characteristic) service.add_characteristic(float_characteristic) accessories = Accessories() accessory.add_service(service) accessories.add(accessory) # bool characteristic callback = AsyncMock() bool_characteristic.callback = callback self.assertEqual(bool_characteristic.value, False) result = asyncio.get_event_loop().run_until_complete( accessories.write_characteristic([{ 'aid': 2, 'iid': 10, 'value': True }])) callback.assert_called_once_with(True) self.assertEqual(result, []) self.assertEqual(bool_characteristic.value, True) # int characteristic write callback = AsyncMock() int_characteristic.callback = callback self.assertEqual(int_characteristic.value, 8) result = asyncio.get_event_loop().run_until_complete( accessories.write_characteristic([{ 'aid': 2, 'iid': 11, 'value': 12 }])) callback.assert_called_once_with(12) self.assertEqual(result, []) self.assertEqual(int_characteristic.value, 12) # float characteristic write callback = AsyncMock() float_characteristic.callback = callback self.assertEqual(float_characteristic.value, 5.0) result = asyncio.get_event_loop().run_until_complete( accessories.write_characteristic([{ 'aid': 2, 'iid': 12, 'value': 7.0 }])) callback.assert_called_once_with(7.0) self.assertEqual(result, []) self.assertEqual(float_characteristic.value, 7.0) # None value during write, leave previous value previous_value = bool_characteristic.value result = asyncio.get_event_loop().run_until_complete( accessories.write_characteristic([{ 'aid': 2, 'iid': 10 }])) self.assertEqual(result, []) self.assertEqual(bool_characteristic.value, previous_value) bool_characteristic.value = previous_value # None callback bool_characteristic.callback = None result = asyncio.get_event_loop().run_until_complete( accessories.write_characteristic([{ 'aid': 2, 'iid': 10, 'value': True }])) self.assertEqual(result, []) # Exception in callback bool_characteristic.callback = exception_callback result = asyncio.get_event_loop().run_until_complete( accessories.write_characteristic([{ 'aid': 2, 'iid': 10, 'value': True }])) self.assertEqual(result, [{ 'aid': 2, 'iid': 10, 'status': -70402, }])