* Update sensor.py * Change "EV Time to Fully Charged" type to datetime object (HA 2022.2) * Validate types before accessing dict entries * Test handling of invalid data from Subaru * Bump to subarulink 0.4.2 * Incorporate style suggestion * Update sensor.py to use SensorEntity * isort tests * Remove SubaruSensor.current_value * Fix isort errors * Resolve conflict from previous PR (add locks) * Fix linting errors in config_flow.py * Incorporate PR review comments for sensor * Incorporate PR review comments for sensor * Make 3rd party library responsible for API data parsing * Add type annotations to sensor.py * Incorporate PR review comments * Incorporate PR review comments * Set _attr_has_entity_name = True for sensors
65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
"""Test Subaru sensors."""
|
|
from unittest.mock import patch
|
|
|
|
from homeassistant.components.subaru.sensor import (
|
|
API_GEN_2_SENSORS,
|
|
EV_SENSORS,
|
|
SAFETY_SENSORS,
|
|
)
|
|
from homeassistant.util import slugify
|
|
from homeassistant.util.unit_system import IMPERIAL_SYSTEM
|
|
|
|
from .api_responses import (
|
|
EXPECTED_STATE_EV_IMPERIAL,
|
|
EXPECTED_STATE_EV_METRIC,
|
|
EXPECTED_STATE_EV_UNAVAILABLE,
|
|
VEHICLE_STATUS_EV,
|
|
)
|
|
from .conftest import (
|
|
MOCK_API_FETCH,
|
|
MOCK_API_GET_DATA,
|
|
TEST_DEVICE_NAME,
|
|
advance_time_to_next_fetch,
|
|
)
|
|
|
|
|
|
async def test_sensors_ev_imperial(hass, ev_entry):
|
|
"""Test sensors supporting imperial units."""
|
|
hass.config.units = IMPERIAL_SYSTEM
|
|
|
|
with patch(MOCK_API_FETCH), patch(
|
|
MOCK_API_GET_DATA, return_value=VEHICLE_STATUS_EV
|
|
):
|
|
advance_time_to_next_fetch(hass)
|
|
await hass.async_block_till_done()
|
|
|
|
_assert_data(hass, EXPECTED_STATE_EV_IMPERIAL)
|
|
|
|
|
|
async def test_sensors_ev_metric(hass, ev_entry):
|
|
"""Test sensors supporting metric units."""
|
|
_assert_data(hass, EXPECTED_STATE_EV_METRIC)
|
|
|
|
|
|
async def test_sensors_missing_vin_data(hass, ev_entry):
|
|
"""Test for missing VIN dataset."""
|
|
with patch(MOCK_API_FETCH), patch(MOCK_API_GET_DATA, return_value=None):
|
|
advance_time_to_next_fetch(hass)
|
|
await hass.async_block_till_done()
|
|
|
|
_assert_data(hass, EXPECTED_STATE_EV_UNAVAILABLE)
|
|
|
|
|
|
def _assert_data(hass, expected_state):
|
|
sensor_list = EV_SENSORS
|
|
sensor_list.extend(API_GEN_2_SENSORS)
|
|
sensor_list.extend(SAFETY_SENSORS)
|
|
expected_states = {}
|
|
for item in sensor_list:
|
|
expected_states[
|
|
f"sensor.{slugify(f'{TEST_DEVICE_NAME} {item.name}')}"
|
|
] = expected_state[item.key]
|
|
|
|
for sensor, value in expected_states.items():
|
|
actual = hass.states.get(sensor)
|
|
assert actual.state == value
|