From e87fb6fc09e70dbcd9c65d183c0addb1b290ffcf Mon Sep 17 00:00:00 2001 From: Patrik Lindgren <21142447+ggravlingen@users.noreply.github.com> Date: Sat, 15 Jan 2022 15:53:03 +0100 Subject: [PATCH] Add test cases for Tradfri sensor platform (#64165) * Add tests for Tradfri sensor platform * Update docstring --- tests/components/tradfri/test_sensor.py | 71 +++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tests/components/tradfri/test_sensor.py diff --git a/tests/components/tradfri/test_sensor.py b/tests/components/tradfri/test_sensor.py new file mode 100644 index 00000000000..1e9ae718285 --- /dev/null +++ b/tests/components/tradfri/test_sensor.py @@ -0,0 +1,71 @@ +"""Tradfri sensor platform tests.""" + +from unittest.mock import MagicMock, Mock + +from .common import setup_integration + + +def mock_sensor(state_name: str, state_value: str, device_number=0): + """Mock a tradfri sensor.""" + dev_info_mock = MagicMock() + dev_info_mock.manufacturer = "manufacturer" + dev_info_mock.model_number = "model" + dev_info_mock.firmware_version = "1.2.3" + + # Set state value, eg battery_level = 50 + setattr(dev_info_mock, state_name, state_value) + + _mock_sensor = Mock( + id=f"mock-sensor-id-{device_number}", + reachable=True, + observe=Mock(), + device_info=dev_info_mock, + has_light_control=False, + has_socket_control=False, + has_blind_control=False, + has_signal_repeater_control=False, + has_air_purifier_control=False, + ) + _mock_sensor.name = f"tradfri_sensor_{device_number}" + + return _mock_sensor + + +async def test_battery_sensor(hass, mock_gateway, mock_api_factory): + """Test that a battery sensor is correctly added.""" + mock_gateway.mock_devices.append( + mock_sensor(state_name="battery_level", state_value=60) + ) + await setup_integration(hass) + + sensor_1 = hass.states.get("sensor.tradfri_sensor_0") + assert sensor_1 is not None + assert sensor_1.state == "60" + assert sensor_1.attributes["unit_of_measurement"] == "%" + assert sensor_1.attributes["device_class"] == "battery" + + +async def test_sensor_observed(hass, mock_gateway, mock_api_factory): + """Test that sensors are correctly observed.""" + + sensor = mock_sensor(state_name="battery_level", state_value=60) + mock_gateway.mock_devices.append(sensor) + await setup_integration(hass) + assert len(sensor.observe.mock_calls) > 0 + + +async def test_sensor_available(hass, mock_gateway, mock_api_factory): + """Test sensor available property.""" + + sensor = mock_sensor(state_name="battery_level", state_value=60, device_number=1) + sensor.reachable = True + + sensor2 = mock_sensor(state_name="battery_level", state_value=60, device_number=2) + sensor2.reachable = False + + mock_gateway.mock_devices.append(sensor) + mock_gateway.mock_devices.append(sensor2) + await setup_integration(hass) + + assert hass.states.get("sensor.tradfri_sensor_1").state == "60" + assert hass.states.get("sensor.tradfri_sensor_2").state == "unavailable"