Removed uncaught exceptions from Dyson (#34112)

* fixed what seems to be a typo

* added load_mock_device in common.py so it loads all the required things into the mocks
so they don't throw exceptions for mocks not being able to convert to int

* reverted change in homeassistant/components/dyson/sensor.py
added both values to the mock device (volatil and volatile)
This commit is contained in:
Ziv 2020-04-16 00:03:14 +03:00 committed by GitHub
parent 72cc656b7e
commit 5bfc1f3d4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 52 additions and 94 deletions

View File

@ -0,0 +1,25 @@
"""Common utils for Dyson tests."""
from unittest import mock
from libpurecool.dyson_pure_cool import FanSpeed
def load_mock_device(device):
"""Load the mock with default values so it doesn't throw errors."""
device.serial = "XX-XXXXX-XX"
device.name = "Temp Name"
device.connect = mock.Mock(return_value=True)
device.auto_connect = mock.Mock(return_value=True)
device.environmental_state.particulate_matter_25 = "0000"
device.environmental_state.particulate_matter_10 = "0000"
device.environmental_state.nitrogen_dioxide = "0000"
device.environmental_state.volatil_organic_compounds = "0000"
device.environmental_state.volatile_organic_compounds = "0000"
device.environmental_state.temperature = 250
device.state.hepa_filter_state = 0
device.state.carbon_filter_state = 0
device.state.speed = FanSpeed.FAN_SPEED_1.value
device.state.oscillation_angle_low = "000"
device.state.oscillation_angle_high = "000"
device.state.filter_life = "000"

View File

@ -17,14 +17,14 @@ import homeassistant.components.dyson.air_quality as dyson
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .common import load_mock_device
def _get_dyson_purecool_device(): def _get_dyson_purecool_device():
"""Return a valid device as provided by the Dyson web services.""" """Return a valid device as provided by the Dyson web services."""
device = mock.Mock(spec=DysonPureCool) device = mock.Mock(spec=DysonPureCool)
device.serial = "XX-XXXXX-XX" load_mock_device(device)
device.name = "Living room" device.name = "Living room"
device.connect = mock.Mock(return_value=True)
device.auto_connect = mock.Mock(return_value=True)
device.environmental_state.particulate_matter_25 = "0014" device.environmental_state.particulate_matter_25 = "0014"
device.environmental_state.particulate_matter_10 = "0025" device.environmental_state.particulate_matter_10 = "0025"
device.environmental_state.nitrogen_dioxide = "0042" device.environmental_state.nitrogen_dioxide = "0042"

View File

@ -3,7 +3,7 @@ import unittest
from unittest import mock from unittest import mock
import asynctest import asynctest
from libpurecool.const import FocusMode, HeatMode, HeatState, HeatTarget, TiltState from libpurecool.const import FocusMode, HeatMode, HeatState, HeatTarget
from libpurecool.dyson_pure_hotcool_link import DysonPureHotCoolLink from libpurecool.dyson_pure_hotcool_link import DysonPureHotCoolLink
from libpurecool.dyson_pure_state import DysonPureHotCoolState from libpurecool.dyson_pure_state import DysonPureHotCoolState
@ -12,6 +12,8 @@ from homeassistant.components.dyson import climate as dyson
from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .common import load_mock_device
from tests.common import get_test_home_assistant from tests.common import get_test_home_assistant
@ -41,7 +43,7 @@ def _get_config():
def _get_device_with_no_state(): def _get_device_with_no_state():
"""Return a device with no state.""" """Return a device with no state."""
device = mock.Mock(spec=DysonPureHotCoolLink) device = mock.Mock(spec=DysonPureHotCoolLink)
device.name = "Device_name" load_mock_device(device)
device.state = None device.state = None
device.environmental_state = None device.environmental_state = None
return device return device
@ -50,16 +52,14 @@ def _get_device_with_no_state():
def _get_device_off(): def _get_device_off():
"""Return a device with state off.""" """Return a device with state off."""
device = mock.Mock(spec=DysonPureHotCoolLink) device = mock.Mock(spec=DysonPureHotCoolLink)
device.name = "Device_name" load_mock_device(device)
device.state = mock.Mock()
device.environmental_state = mock.Mock()
return device return device
def _get_device_focus(): def _get_device_focus():
"""Return a device with fan state of focus mode.""" """Return a device with fan state of focus mode."""
device = mock.Mock(spec=DysonPureHotCoolLink) device = mock.Mock(spec=DysonPureHotCoolLink)
device.name = "Device_name" load_mock_device(device)
device.state.focus_mode = FocusMode.FOCUS_ON.value device.state.focus_mode = FocusMode.FOCUS_ON.value
return device return device
@ -67,7 +67,7 @@ def _get_device_focus():
def _get_device_diffuse(): def _get_device_diffuse():
"""Return a device with fan state of diffuse mode.""" """Return a device with fan state of diffuse mode."""
device = mock.Mock(spec=DysonPureHotCoolLink) device = mock.Mock(spec=DysonPureHotCoolLink)
device.name = "Device_name" load_mock_device(device)
device.state.focus_mode = FocusMode.FOCUS_OFF.value device.state.focus_mode = FocusMode.FOCUS_OFF.value
return device return device
@ -75,41 +75,28 @@ def _get_device_diffuse():
def _get_device_cool(): def _get_device_cool():
"""Return a device with state of cooling.""" """Return a device with state of cooling."""
device = mock.Mock(spec=DysonPureHotCoolLink) device = mock.Mock(spec=DysonPureHotCoolLink)
device.name = "Device_name" load_mock_device(device)
device.serial = "XX-XXXXX-XX"
device.state.tilt = TiltState.TILT_FALSE.value
device.state.focus_mode = FocusMode.FOCUS_OFF.value device.state.focus_mode = FocusMode.FOCUS_OFF.value
device.state.heat_target = HeatTarget.celsius(12) device.state.heat_target = HeatTarget.celsius(12)
device.state.heat_mode = HeatMode.HEAT_OFF.value device.state.heat_mode = HeatMode.HEAT_OFF.value
device.state.heat_state = HeatState.HEAT_STATE_OFF.value device.state.heat_state = HeatState.HEAT_STATE_OFF.value
device.environmental_state.temperature = 288
device.environmental_state.humidity = 53
return device return device
def _get_device_heat_off(): def _get_device_heat_off():
"""Return a device with state of heat reached target.""" """Return a device with state of heat reached target."""
device = mock.Mock(spec=DysonPureHotCoolLink) device = mock.Mock(spec=DysonPureHotCoolLink)
device.name = "Device_name" load_mock_device(device)
device.state = mock.Mock()
device.state.tilt = TiltState.TILT_FALSE.value
device.state.focus_mode = FocusMode.FOCUS_ON.value
device.state.heat_target = HeatTarget.celsius(20)
device.state.heat_mode = HeatMode.HEAT_ON.value device.state.heat_mode = HeatMode.HEAT_ON.value
device.state.heat_state = HeatState.HEAT_STATE_OFF.value device.state.heat_state = HeatState.HEAT_STATE_OFF.value
device.environmental_state.temperature = 293
device.environmental_state.humidity = 53
return device return device
def _get_device_heat_on(): def _get_device_heat_on():
"""Return a device with state of heating.""" """Return a device with state of heating."""
device = mock.Mock(spec=DysonPureHotCoolLink) device = mock.Mock(spec=DysonPureHotCoolLink)
device.name = "Device_name" load_mock_device(device)
device.serial = "YY-YYYYY-YY" device.serial = "YY-YYYYY-YY"
device.state = mock.Mock()
device.state.tilt = TiltState.TILT_FALSE.value
device.state.focus_mode = FocusMode.FOCUS_ON.value
device.state.heat_target = HeatTarget.celsius(23) device.state.heat_target = HeatTarget.celsius(23)
device.state.heat_mode = HeatMode.HEAT_ON.value device.state.heat_mode = HeatMode.HEAT_ON.value
device.state.heat_state = HeatState.HEAT_STATE_ON.value device.state.heat_state = HeatState.HEAT_STATE_ON.value

View File

@ -26,6 +26,8 @@ from homeassistant.const import ATTR_ENTITY_ID, SERVICE_TURN_OFF, SERVICE_TURN_O
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .common import load_mock_device
from tests.common import get_test_home_assistant from tests.common import get_test_home_assistant
@ -40,37 +42,19 @@ class MockDysonState(DysonPureCoolState):
def _get_dyson_purecool_device(): def _get_dyson_purecool_device():
"""Return a valid device as provided by the Dyson web services.""" """Return a valid device as provided by the Dyson web services."""
device = mock.Mock(spec=DysonPureCool) device = mock.Mock(spec=DysonPureCool)
device.serial = "XX-XXXXX-XX" load_mock_device(device)
device.name = "Living room" device.name = "Living room"
device.connect = mock.Mock(return_value=True)
device.auto_connect = mock.Mock(return_value=True)
device.state = mock.Mock()
device.state.oscillation = "OION"
device.state.fan_power = "ON"
device.state.speed = FanSpeed.FAN_SPEED_AUTO.value
device.state.night_mode = "OFF"
device.state.auto_mode = "ON"
device.state.oscillation_angle_low = "0090"
device.state.oscillation_angle_high = "0180"
device.state.front_direction = "ON"
device.state.sleep_timer = 60
device.state.hepa_filter_state = "0090"
device.state.carbon_filter_state = "0080"
return device return device
def _get_dyson_purecoollink_device(): def _get_dyson_purecoollink_device():
"""Return a valid device as provided by the Dyson web services.""" """Return a valid device as provided by the Dyson web services."""
device = mock.Mock(spec=DysonPureCoolLink) device = mock.Mock(spec=DysonPureCoolLink)
device.serial = "XX-XXXXX-XX" load_mock_device(device)
device.name = "Living room" device.name = "Living room"
device.connect = mock.Mock(return_value=True)
device.auto_connect = mock.Mock(return_value=True)
device.state = mock.Mock()
device.state.oscillation = "ON" device.state.oscillation = "ON"
device.state.fan_mode = "FAN" device.state.fan_mode = "FAN"
device.state.speed = FanSpeed.FAN_SPEED_AUTO.value device.state.speed = FanSpeed.FAN_SPEED_AUTO.value
device.state.night_mode = "OFF"
return device return device

View File

@ -4,13 +4,15 @@ from unittest import mock
from homeassistant.components import dyson from homeassistant.components import dyson
from .common import load_mock_device
from tests.common import get_test_home_assistant from tests.common import get_test_home_assistant
def _get_dyson_account_device_available(): def _get_dyson_account_device_available():
"""Return a valid device provide by Dyson web services.""" """Return a valid device provide by Dyson web services."""
device = mock.Mock() device = mock.Mock()
device.serial = "XX-XXXXX-XX" load_mock_device(device)
device.connect = mock.Mock(return_value=True) device.connect = mock.Mock(return_value=True)
device.auto_connect = mock.Mock(return_value=True) device.auto_connect = mock.Mock(return_value=True)
return device return device
@ -19,7 +21,7 @@ def _get_dyson_account_device_available():
def _get_dyson_account_device_not_available(): def _get_dyson_account_device_not_available():
"""Return an invalid device provide by Dyson web services.""" """Return an invalid device provide by Dyson web services."""
device = mock.Mock() device = mock.Mock()
device.serial = "XX-XXXXX-XX" load_mock_device(device)
device.connect = mock.Mock(return_value=False) device.connect = mock.Mock(return_value=False)
device.auto_connect = mock.Mock(return_value=False) device.auto_connect = mock.Mock(return_value=False)
return device return device
@ -28,7 +30,7 @@ def _get_dyson_account_device_not_available():
def _get_dyson_account_device_error(): def _get_dyson_account_device_error():
"""Return an invalid device raising OSError while connecting.""" """Return an invalid device raising OSError while connecting."""
device = mock.Mock() device = mock.Mock()
device.serial = "XX-XXXXX-XX" load_mock_device(device)
device.connect = mock.Mock(side_effect=OSError("Network error")) device.connect = mock.Mock(side_effect=OSError("Network error"))
return device return device

View File

@ -18,20 +18,15 @@ from homeassistant.const import (
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .common import load_mock_device
from tests.common import get_test_home_assistant from tests.common import get_test_home_assistant
def _get_dyson_purecool_device(): def _get_dyson_purecool_device():
"""Return a valid device provide by Dyson web services.""" """Return a valid device provide by Dyson web services."""
device = mock.Mock(spec=DysonPureCool) device = mock.Mock(spec=DysonPureCool)
device.serial = "XX-XXXXX-XX" load_mock_device(device)
device.name = "Living room"
device.connect = mock.Mock(return_value=True)
device.auto_connect = mock.Mock(return_value=True)
device.environmental_state.humidity = 42
device.environmental_state.temperature = 280
device.state.hepa_filter_state = 90
device.state.carbon_filter_state = 80
return device return device
@ -61,10 +56,9 @@ def _get_device_without_state():
def _get_with_state(): def _get_with_state():
"""Return a valid device with state values.""" """Return a valid device with state values."""
device = mock.Mock() device = mock.Mock()
load_mock_device(device)
device.name = "Device_name" device.name = "Device_name"
device.state = mock.Mock()
device.state.filter_life = 100 device.state.filter_life = 100
device.environmental_state = mock.Mock()
device.environmental_state.dust = 5 device.environmental_state.dust = 5
device.environmental_state.humidity = 45 device.environmental_state.humidity = 45
device.environmental_state.temperature = 295 device.environmental_state.temperature = 295
@ -76,14 +70,10 @@ def _get_with_state():
def _get_with_standby_monitoring(): def _get_with_standby_monitoring():
"""Return a valid device with state but with standby monitoring disable.""" """Return a valid device with state but with standby monitoring disable."""
device = mock.Mock() device = mock.Mock()
load_mock_device(device)
device.name = "Device_name" device.name = "Device_name"
device.state = mock.Mock()
device.state.filter_life = 100
device.environmental_state = mock.Mock()
device.environmental_state.dust = 5
device.environmental_state.humidity = 0 device.environmental_state.humidity = 0
device.environmental_state.temperature = 0 device.environmental_state.temperature = 0
device.environmental_state.volatil_organic_compounds = 2
return device return device

View File

@ -1,35 +1,5 @@
"""List of modules that have uncaught exceptions today. Will be shrunk over time.""" """List of modules that have uncaught exceptions today. Will be shrunk over time."""
IGNORE_UNCAUGHT_EXCEPTIONS = [ IGNORE_UNCAUGHT_EXCEPTIONS = [
("tests.components.dyson.test_air_quality", "test_purecool_aiq_attributes"),
("tests.components.dyson.test_air_quality", "test_purecool_aiq_update_state"),
(
"tests.components.dyson.test_air_quality",
"test_purecool_component_setup_only_once",
),
("tests.components.dyson.test_air_quality", "test_purecool_aiq_without_discovery"),
(
"tests.components.dyson.test_air_quality",
"test_purecool_aiq_empty_environment_state",
),
(
"tests.components.dyson.test_climate",
"test_setup_component_with_parent_discovery",
),
("tests.components.dyson.test_fan", "test_purecoollink_attributes"),
("tests.components.dyson.test_fan", "test_purecool_turn_on"),
("tests.components.dyson.test_fan", "test_purecool_set_speed"),
("tests.components.dyson.test_fan", "test_purecool_turn_off"),
("tests.components.dyson.test_fan", "test_purecool_set_dyson_speed"),
("tests.components.dyson.test_fan", "test_purecool_oscillate"),
("tests.components.dyson.test_fan", "test_purecool_set_night_mode"),
("tests.components.dyson.test_fan", "test_purecool_set_auto_mode"),
("tests.components.dyson.test_fan", "test_purecool_set_angle"),
("tests.components.dyson.test_fan", "test_purecool_set_flow_direction_front"),
("tests.components.dyson.test_fan", "test_purecool_set_timer"),
("tests.components.dyson.test_fan", "test_purecool_update_state"),
("tests.components.dyson.test_fan", "test_purecool_update_state_filter_inv"),
("tests.components.dyson.test_fan", "test_purecool_component_setup_only_once"),
("tests.components.dyson.test_sensor", "test_purecool_component_setup_only_once"),
("tests.components.ios.test_init", "test_creating_entry_sets_up_sensor"), ("tests.components.ios.test_init", "test_creating_entry_sets_up_sensor"),
("tests.components.ios.test_init", "test_not_configuring_ios_not_creates_entry"), ("tests.components.ios.test_init", "test_not_configuring_ios_not_creates_entry"),
("tests.components.local_file.test_camera", "test_file_not_readable"), ("tests.components.local_file.test_camera", "test_file_not_readable"),