def test_on_connect_failed(self): userdata = Mock() userdata.product_type = 'ptype' userdata.serial = 'serial' DysonPureCoolLink.on_connect(None, userdata, None, 1) userdata.connection_callback.assert_called_with(False) self.assertEqual(userdata.connection_callback.call_count, 1)
def test_on_connect(self): client = Mock() client.subscribe = Mock() userdata = Mock() userdata.product_type = 'ptype' userdata.serial = 'serial' DysonPureCoolLink.on_connect(client, userdata, None, 0) userdata.connection_callback.assert_called_with(True) self.assertEqual(userdata.connection_callback.call_count, 1) client.subscribe.assert_called_with("ptype/serial/status/current")
def test_dont_request_state_if_not_connected(self, mocked_connect, mocked_publish): device = DysonPureCoolLink({ "Active": True, "Serial": "device-id-1", "Name": "device-1", "ScaleUnit": "SU01", "Version": "21.03.08", "LocalCredentials": "1/aJ5t52WvAfn+z+fjDuef86kQDQPefbQ6/70ZGysII1K" "e1i0ZHakFH84DZuxsSQ4KTT2vbCm7uYeTORULKLKQ==", "AutoUpdate": True, "NewVersionAvailable": False, "ProductType": "475" }) network_device = NetworkDevice('device-1', 'host', 1111) device.connection_callback(False) device._add_network_device(network_device) connected = device.connect(None, "192.168.0.2") self.assertFalse(connected) self.assertEqual(mocked_connect.call_count, 1) device.request_current_state() self.assertEqual(mocked_publish.call_count, 0)
def test_on_message_without_callback(self): userdata = Mock() userdata.callback_message = [] msg = Mock() payload = b'{"msg":"CURRENT-STATE","time":' \ b'"2017-02-19T15:00:18.000Z","mode-reason":"LAPP",' \ b'"state-reason":"MODE","dial":"OFF","rssi":"-58",' \ b'"product-state":{"fmod":"AUTO","fnst":"FAN",' \ b'"fnsp":"AUTO","qtar":"0004","oson":"OFF","rhtm":"ON",' \ b'"filf":"2159","ercd":"02C0","nmod":"ON","wacd":"NONE"},' \ b'"scheduler":{"srsc":"cbd0","dstv":"0001","tzid":"0001"}}' msg.payload = payload DysonPureCoolLink.on_message(None, userdata, msg)
def test_on_message_sensor(self): def on_message(msg): assert isinstance(msg, DysonEnvironmentalSensorState) userdata = Mock() userdata.callback_message = [on_message] msg = Mock() payload = b'{"msg": "ENVIRONMENTAL-CURRENT-SENSOR-DATA","time":' \ b'"2017-06-17T23:05:49.001Z","data": '\ b'{"tact": "2967","hact": "0054","pact": "0004",' \ b'"vact": "0005","sltm": "0028"}}' msg.payload = payload DysonPureCoolLink.on_message(None, userdata, msg)
def test_on_message_with_unknown_message(self): def on_message(msg): # Should not be called assert msg == 0 userdata = Mock() userdata.callback_message = [on_message] msg = Mock() payload = b'{"msg": "ENVIRONMENTAL-CURRENT-SENSOR-DATAS","time":' \ b'"2017-06-17T23:05:49.001Z","data": ' \ b'{"tact": "2967","hact": "0054","pact": "0004",' \ b'"vact": "0005","sltm": "0028"}}' msg.payload = payload DysonPureCoolLink.on_message(None, userdata, msg)
def test_device_dyson_listener(self, mocked_ntoa): listener = DysonPureCoolLink.DysonDeviceListener( 'serial-1', on_add_device) zeroconf = Mock() listener.remove_service(zeroconf, "ptype", "serial-1") info = Mock() info.address = "192.168.0.1" zeroconf.get_service_info = Mock() zeroconf.get_service_info.return_value = info listener.add_service(zeroconf, '_dyson_mqtt._tcp.local.', 'ptype_serial-1._dyson_mqtt._tcp.local.')
def test_dont_set_configuration_if_not_connected(self, mocked_connect, mocked_publish): device = DysonPureCoolLink({ "Active": True, "Serial": "device-id-1", "Name": "device-1", "ScaleUnit": "SU01", "Version": "21.03.08", "LocalCredentials": "1/aJ5t52WvAfn+z+fjDuef86kQDQPefbQ6/70ZGysII1K" "e1i0ZHakFH84DZuxsSQ4KTT2vbCm7uYeTORULKLKQ==", "AutoUpdate": True, "NewVersionAvailable": False, "ProductType": "475" }) network_device = NetworkDevice('device-1', 'host', 1111) device._add_network_device(network_device) device._current_state = DysonState( open("tests/data/state.json", "r").read()) device.connection_callback(False) connected = device.connect(None) self.assertFalse(connected) self.assertEqual(mocked_connect.call_count, 1) device.set_configuration(fan_mode=FanMode.FAN, oscillation=Oscillation.OSCILLATION_ON, fan_speed=FanSpeed.FAN_SPEED_3, night_mode=NightMode.NIGHT_MODE_OFF) self.assertEqual(mocked_publish.call_count, 0) self.assertEqual( device.__repr__(), "DysonDevice(device-id-1,True,device-1,21.03.08,True" ",False,475,NetworkDevice(device-1,host,1111))")
def test_add_message_listener(self): def on_message(): pass def on_message_2(): pass device = DysonPureCoolLink({ "Active": True, "Serial": "device-id-1", "Name": "device-1", "ScaleUnit": "SU01", "Version": "21.03.08", "LocalCredentials": "1/aJ5t52WvAfn+z+fjDuef86kQDQPefbQ6/70ZGysII1K" "e1i0ZHakFH84DZuxsSQ4KTT2vbCm7uYeTORULKLKQ==", "AutoUpdate": True, "NewVersionAvailable": False, "ProductType": "475" }) device.add_message_listener(on_message) assert len(device.callback_message) == 1 device.remove_message_listener(on_message) assert len(device.callback_message) == 0 device.add_message_listener(on_message_2) device.add_message_listener(on_message) assert len(device.callback_message) == 2 device.clear_message_listener() assert len(device.callback_message) == 0
def test_set_configuration_timer_off(self, mocked_connect, mocked_publish): device = DysonPureCoolLink({ "Active": True, "Serial": "device-id-1", "Name": "device-1", "ScaleUnit": "SU01", "Version": "21.03.08", "LocalCredentials": "1/aJ5t52WvAfn+z+fjDuef86kQDQPefbQ6/70ZGysII1K" "e1i0ZHakFH84DZuxsSQ4KTT2vbCm7uYeTORULKLKQ==", "AutoUpdate": True, "NewVersionAvailable": False, "ProductType": "475" }) network_device = NetworkDevice('device-1', 'host', 1111) device._add_network_device(network_device) device._current_state = DysonState(Desk, open("tests/data/state.json", "r").read()) device.connection_callback(True) device.state_data_available() device.sensor_data_available() connected = device.connect(None) self.assertTrue(connected) self.assertEqual(mocked_connect.call_count, 1) device.set_configuration(sleep_timer=0) self.assertEqual(mocked_publish.call_count, 3) self.assertEqual(device.__repr__(), "DysonDevice(serial=device-id-1,active=True," "name=device-1,version=21.03.08,auto_update=True," "new_version_available=False,product_type=475," "network_device=NetworkDevice(name=device-1," "address=host,port=1111))") device.disconnect()
def test_set_configuration_rst_filter(self, mocked_connect, mocked_publish): device = DysonPureCoolLink({ "Active": True, "Serial": "device-id-1", "Name": "device-1", "ScaleUnit": "SU01", "Version": "21.03.08", "LocalCredentials": "1/aJ5t52WvAfn+z+fjDuef86kQDQPefbQ6/70ZGysII1K" "e1i0ZHakFH84DZuxsSQ4KTT2vbCm7uYeTORULKLKQ==", "AutoUpdate": True, "NewVersionAvailable": False, "ProductType": "475" }) network_device = NetworkDevice('device-1', 'host', 1111) device._add_network_device(network_device) device._current_state = DysonState(open("tests/data/state.json", "r"). read()) device.connection_callback(True) device.state_data_available() device.sensor_data_available() connected = device.connect(None) self.assertTrue(connected) self.assertEqual(mocked_connect.call_count, 1) device.set_configuration(fan_mode=FanMode.FAN, oscillation=Oscillation.OSCILLATION_ON, fan_speed=FanSpeed.FAN_SPEED_3, night_mode=NightMode.NIGHT_MODE_OFF, quality_target=QualityTarget.QUALITY_NORMAL, standby_monitoring=SM.STANDBY_MONITORING_ON, reset_filter=ResetFilter.RESET_FILTER ) self.assertEqual(mocked_publish.call_count, 3) self.assertEqual(device.__repr__(), "DysonDevice(device-id-1,True,device-1,21.03.08,True" ",False,475,NetworkDevice(device-1,host,1111))") device.disconnect()
def test_set_configuration_hot(self, mocked_connect, mocked_publish): device = DysonPureCoolLink({ "Active": True, "Serial": "device-id-1", "Name": "device-1", "ScaleUnit": "SU01", "Version": "21.03.08", "LocalCredentials": "1/aJ5t52WvAfn+z+fjDuef86kQDQPefbQ6/70ZGysII1K" "e1i0ZHakFH84DZuxsSQ4KTT2vbCm7uYeTORULKLKQ==", "AutoUpdate": True, "NewVersionAvailable": False, "ProductType": Hot }) network_device = NetworkDevice('device-1', 'host', 1111) device._add_network_device(network_device) device._current_state = DysonState(Hot, open("tests/data/state_hot.json", "r").read()) device.connection_callback(True) device.state_data_available() device.sensor_data_available() connected = device.connect(None) self.assertTrue(connected) self.assertEqual(mocked_connect.call_count, 1) device.set_configuration(fan_mode=FanMode.FAN, oscillation=Oscillation.OSCILLATION_ON, fan_speed=FanSpeed.FAN_SPEED_3, night_mode=NightMode.NIGHT_MODE_OFF, quality_target=QualityTarget.QUALITY_NORMAL, standby_monitoring=SM.STANDBY_MONITORING_ON, heat_mode=HeatMode.HEAT_ON, focus_mode=FocusMode.FOCUS_ON, heat_target=HeatTarget.celsius(25) ) self.assertEqual(mocked_publish.call_count, 3) self.assertEqual(device.__repr__(), "DysonDevice(serial=device-id-1,active=True," "name=device-1,version=21.03.08,auto_update=True," "new_version_available=False,product_type=455," "network_device=NetworkDevice(name=device-1," "address=host,port=1111))") device.disconnect()