async def test_status_invalid_json(hass, mqtt_mock):
    """Test to make sure nothing breaks if the vacuum sends bad JSON."""
    config = deepcopy(DEFAULT_CONFIG)
    config[mqttvacuum.CONF_SUPPORTED_FEATURES] = \
        mqttvacuum.services_to_strings(ALL_SERVICES, SERVICE_TO_STRING)

    assert await async_setup_component(hass, vacuum.DOMAIN, {
        vacuum.DOMAIN: config,
    })

    async_fire_mqtt_message(hass, 'vacuum/state', '{"asdfasas false}')
    state = hass.states.get('vacuum.mqtttest')
    assert state.state == STATE_OFF
    assert state.attributes.get(ATTR_STATUS) == "Stopped"
async def test_status_charging(hass, mqtt_mock):
    """Test status updates from the vacuum."""
    config = deepcopy(DEFAULT_CONFIG)
    config[mqttvacuum.CONF_SUPPORTED_FEATURES] = \
        mqttvacuum.services_to_strings(ALL_SERVICES, SERVICE_TO_STRING)

    assert await async_setup_component(hass, vacuum.DOMAIN, {
        vacuum.DOMAIN: config,
    })

    message = """{
        "charging": true
    }"""
    async_fire_mqtt_message(hass, 'vacuum/state', message)
    state = hass.states.get('vacuum.mqtttest')
    assert state.attributes.get(ATTR_BATTERY_ICON) == 'mdi:battery-outline'
async def test_status_fan_speed(hass, mqtt_mock):
    """Test status updates from the vacuum."""
    config = deepcopy(DEFAULT_CONFIG)
    config[mqttvacuum.CONF_SUPPORTED_FEATURES] = \
        mqttvacuum.services_to_strings(ALL_SERVICES, SERVICE_TO_STRING)

    assert await async_setup_component(hass, vacuum.DOMAIN, {
        vacuum.DOMAIN: config,
    })

    message = """{
        "fan_speed": "max"
    }"""
    async_fire_mqtt_message(hass, 'vacuum/state', message)
    state = hass.states.get('vacuum.mqtttest')
    assert state.attributes.get(ATTR_FAN_SPEED) == 'max'
async def test_status_docked(hass, mqtt_mock):
    """Test status updates from the vacuum."""
    config = deepcopy(DEFAULT_CONFIG)
    config[mqttvacuum.CONF_SUPPORTED_FEATURES] = \
        mqttvacuum.services_to_strings(ALL_SERVICES, SERVICE_TO_STRING)

    assert await async_setup_component(hass, vacuum.DOMAIN, {
        vacuum.DOMAIN: config,
    })

    message = """{
        "docked": true
    }"""
    async_fire_mqtt_message(hass, 'vacuum/state', message)
    state = hass.states.get('vacuum.mqtttest')
    assert state.state == STATE_OFF
Beispiel #5
0
async def test_status_battery(hass, mqtt_mock):
    """Test status updates from the vacuum."""
    config = deepcopy(DEFAULT_CONFIG)
    config[
        mqttvacuum.CONF_SUPPORTED_FEATURES] = mqttvacuum.services_to_strings(
            ALL_SERVICES, SERVICE_TO_STRING)

    assert await async_setup_component(hass, vacuum.DOMAIN,
                                       {vacuum.DOMAIN: config})

    message = """{
        "battery_level": 54
    }"""
    async_fire_mqtt_message(hass, "vacuum/state", message)
    state = hass.states.get("vacuum.mqtttest")
    assert state.attributes.get(ATTR_BATTERY_ICON) == "mdi:battery-50"
Beispiel #6
0
async def test_battery_template(hass, mqtt_mock):
    """Test that you can use non-default templates for battery_level."""
    config = deepcopy(DEFAULT_CONFIG)
    config.update({
        mqttvacuum.CONF_SUPPORTED_FEATURES:
        mqttvacuum.services_to_strings(ALL_SERVICES, SERVICE_TO_STRING),
        mqttvacuum.CONF_BATTERY_LEVEL_TOPIC:
        "retroroomba/battery_level",
        mqttvacuum.CONF_BATTERY_LEVEL_TEMPLATE:
        "{{ value }}",
    })

    assert await async_setup_component(hass, vacuum.DOMAIN,
                                       {vacuum.DOMAIN: config})

    async_fire_mqtt_message(hass, "retroroomba/battery_level", "54")
    state = hass.states.get("vacuum.mqtttest")
    assert state.attributes.get(ATTR_BATTERY_LEVEL) == 54
    assert state.attributes.get(ATTR_BATTERY_ICON) == "mdi:battery-50"
async def test_status(hass, mqtt_mock):
    """Test status updates from the vacuum."""
    config = deepcopy(DEFAULT_CONFIG)
    config[mqttvacuum.CONF_SUPPORTED_FEATURES] = \
        mqttvacuum.services_to_strings(ALL_SERVICES, SERVICE_TO_STRING)

    assert await async_setup_component(hass, vacuum.DOMAIN, {
        vacuum.DOMAIN: config,
    })

    message = """{
        "battery_level": 54,
        "cleaning": true,
        "docked": false,
        "charging": false,
        "fan_speed": "max"
    }"""
    async_fire_mqtt_message(hass, 'vacuum/state', message)
    state = hass.states.get('vacuum.mqtttest')
    assert state.state == STATE_ON
    assert state.attributes.get(ATTR_BATTERY_ICON) == 'mdi:battery-50'
    assert state.attributes.get(ATTR_BATTERY_LEVEL) == 54
    assert state.attributes.get(ATTR_FAN_SPEED) == 'max'

    message = """{
        "battery_level": 61,
        "docked": true,
        "cleaning": false,
        "charging": true,
        "fan_speed": "min"
    }"""

    async_fire_mqtt_message(hass, 'vacuum/state', message)
    state = hass.states.get('vacuum.mqtttest')
    assert state.state == STATE_OFF
    assert state.attributes.get(ATTR_BATTERY_ICON) == 'mdi:battery-charging-60'
    assert state.attributes.get(ATTR_BATTERY_LEVEL) == 61
    assert state.attributes.get(ATTR_FAN_SPEED) == 'min'
Beispiel #8
0
async def test_status_error(hass, mqtt_mock):
    """Test status updates from the vacuum."""
    config = deepcopy(DEFAULT_CONFIG)
    config[
        mqttvacuum.CONF_SUPPORTED_FEATURES] = mqttvacuum.services_to_strings(
            ALL_SERVICES, SERVICE_TO_STRING)

    assert await async_setup_component(hass, vacuum.DOMAIN,
                                       {vacuum.DOMAIN: config})

    message = """{
        "error": "Error1"
    }"""
    async_fire_mqtt_message(hass, "vacuum/state", message)
    state = hass.states.get("vacuum.mqtttest")
    assert state.attributes.get(ATTR_STATUS) == "Error: Error1"

    message = """{
        "error": ""
    }"""
    async_fire_mqtt_message(hass, "vacuum/state", message)
    state = hass.states.get("vacuum.mqtttest")
    assert state.attributes.get(ATTR_STATUS) == "Stopped"
async def test_all_commands(hass, mqtt_mock):
    """Test simple commands to the vacuum."""
    config = deepcopy(DEFAULT_CONFIG)
    config[mqttvacuum.CONF_SUPPORTED_FEATURES] = \
        mqttvacuum.services_to_strings(ALL_SERVICES, SERVICE_TO_STRING)

    assert await async_setup_component(hass, vacuum.DOMAIN, {
        vacuum.DOMAIN: config,
    })

    await common.async_turn_on(hass, 'vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/command',
                                                    'turn_on', 0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_turn_off(hass, 'vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/command',
                                                    'turn_off', 0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_stop(hass, 'vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/command', 'stop',
                                                    0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_clean_spot(hass, 'vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/command',
                                                    'clean_spot', 0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_locate(hass, 'vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/command', 'locate',
                                                    0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_start_pause(hass, 'vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/command',
                                                    'start_pause', 0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_return_to_base(hass, 'vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/command',
                                                    'return_to_base', 0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_set_fan_speed(hass, 'high', 'vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/set_fan_speed',
                                                    'high', 0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_send_command(hass,
                                    '44 FE 93',
                                    entity_id='vacuum.mqtttest')
    mqtt_mock.async_publish.assert_called_once_with('vacuum/send_command',
                                                    '44 FE 93', 0, False)
    mqtt_mock.async_publish.reset_mock()

    await common.async_send_command(hass,
                                    '44 FE 93', {"key": "value"},
                                    entity_id='vacuum.mqtttest')
    assert json.loads(mqtt_mock.async_publish.mock_calls[-1][1][1]) == {
        "command": "44 FE 93",
        "key": "value"
    }

    await common.async_send_command(hass,
                                    '44 FE 93', {"key": "value"},
                                    entity_id='vacuum.mqtttest')
    assert json.loads(mqtt_mock.async_publish.mock_calls[-1][1][1]) == {
        "command": "44 FE 93",
        "key": "value"
    }