mirror of
https://github.com/home-assistant/core.git
synced 2025-11-12 20:40:18 +00:00
* Add default device class display precision for Sensor * Renaming, docstrings, cleanup * Simplify units list * Fix tests * Fix missing precision when suggested is specified * Update snapshots * Fix when unit of measurement is not valid * Fix tests * Fix deprecated unit usage * Fix goalzero tests The sensor native_value method was accessing the data dict and trowing, since the mock did not have any data for the sensors. Since now the precision is always specified (it was missing for those sensors), the throw was hitting async_update_entity_options in _update_suggested_precision. Previously, async_update_entity_options was not called since it had no precision. * Fix metoffice * Fix smartthings * Add default sensor data for Tesla Wall Connector tests * Update snapshots * Revert spaces * Update smartthings snapshots * Add missing sensor mock for tesla wall connector * Address review comments * Add doc comment * Add cap to doc comment * Update comment * Update snapshots * Update comment
195 lines
6.5 KiB
Python
195 lines
6.5 KiB
Python
"""The tests for the hddtemp platform."""
|
|
|
|
import socket
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.const import UnitOfTemperature
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
VALID_CONFIG_MINIMAL = {"sensor": {"platform": "hddtemp"}}
|
|
|
|
VALID_CONFIG_NAME = {"sensor": {"platform": "hddtemp", "name": "FooBar"}}
|
|
|
|
VALID_CONFIG_ONE_DISK = {"sensor": {"platform": "hddtemp", "disks": ["/dev/sdd1"]}}
|
|
|
|
VALID_CONFIG_WRONG_DISK = {"sensor": {"platform": "hddtemp", "disks": ["/dev/sdx1"]}}
|
|
|
|
VALID_CONFIG_MULTIPLE_DISKS = {
|
|
"sensor": {
|
|
"platform": "hddtemp",
|
|
"host": "foobar.local",
|
|
"disks": ["/dev/sda1", "/dev/sdb1", "/dev/sdc1"],
|
|
}
|
|
}
|
|
|
|
VALID_CONFIG_HOST_REFUSED = {"sensor": {"platform": "hddtemp", "host": "alice.local"}}
|
|
|
|
VALID_CONFIG_HOST_UNREACHABLE = {"sensor": {"platform": "hddtemp", "host": "bob.local"}}
|
|
|
|
REFERENCE = {
|
|
"/dev/sda1": {
|
|
"device": "/dev/sda1",
|
|
"temperature": "29",
|
|
"unit_of_measurement": UnitOfTemperature.CELSIUS,
|
|
"model": "WDC WD30EZRX-12DC0B0",
|
|
},
|
|
"/dev/sdb1": {
|
|
"device": "/dev/sdb1",
|
|
"temperature": "32",
|
|
"unit_of_measurement": UnitOfTemperature.CELSIUS,
|
|
"model": "WDC WD15EADS-11P7B2",
|
|
},
|
|
"/dev/sdc1": {
|
|
"device": "/dev/sdc1",
|
|
"temperature": "29",
|
|
"unit_of_measurement": UnitOfTemperature.CELSIUS,
|
|
"model": "WDC WD20EARX-22MMMB0",
|
|
},
|
|
"/dev/sdd1": {
|
|
"device": "/dev/sdd1",
|
|
"temperature": "32",
|
|
"unit_of_measurement": UnitOfTemperature.CELSIUS,
|
|
"model": "WDC WD15EARS-00Z5B1",
|
|
},
|
|
}
|
|
|
|
|
|
class TelnetMock:
|
|
"""Mock class for the telnetlib.Telnet object."""
|
|
|
|
def __init__(self, host, port, timeout=0) -> None:
|
|
"""Initialize Telnet object."""
|
|
self.host = host
|
|
self.port = port
|
|
self.timeout = timeout
|
|
self.sample_data = bytes(
|
|
"|/dev/sda1|WDC WD30EZRX-12DC0B0|29|C|"
|
|
"|/dev/sdb1|WDC WD15EADS-11P7B2|32|C|"
|
|
"|/dev/sdc1|WDC WD20EARX-22MMMB0|29|C|"
|
|
"|/dev/sdd1|WDC WD15EARS-00Z5B1|89|F|",
|
|
"ascii",
|
|
)
|
|
|
|
def read_all(self):
|
|
"""Return sample values."""
|
|
if self.host == "alice.local":
|
|
raise ConnectionRefusedError
|
|
if self.host == "bob.local":
|
|
raise socket.gaierror
|
|
return self.sample_data
|
|
|
|
|
|
@pytest.fixture
|
|
def telnetmock():
|
|
"""Mock telnet."""
|
|
with patch("homeassistant.components.hddtemp.sensor.Telnet", new=TelnetMock):
|
|
yield
|
|
|
|
|
|
async def test_hddtemp_min_config(hass: HomeAssistant, telnetmock) -> None:
|
|
"""Test minimal hddtemp configuration."""
|
|
assert await async_setup_component(hass, "sensor", VALID_CONFIG_MINIMAL)
|
|
await hass.async_block_till_done()
|
|
|
|
entity_id = hass.states.async_all()[0].entity_id
|
|
state = hass.states.get(entity_id)
|
|
|
|
reference = REFERENCE[state.attributes.get("device")]
|
|
|
|
assert state.state == reference["temperature"]
|
|
assert state.attributes.get("device") == reference["device"]
|
|
assert state.attributes.get("model") == reference["model"]
|
|
assert (
|
|
state.attributes.get("unit_of_measurement") == reference["unit_of_measurement"]
|
|
)
|
|
assert (
|
|
state.attributes.get("friendly_name") == f"HD Temperature {reference['device']}"
|
|
)
|
|
|
|
|
|
async def test_hddtemp_rename_config(hass: HomeAssistant, telnetmock) -> None:
|
|
"""Test hddtemp configuration with different name."""
|
|
assert await async_setup_component(hass, "sensor", VALID_CONFIG_NAME)
|
|
await hass.async_block_till_done()
|
|
|
|
entity_id = hass.states.async_all()[0].entity_id
|
|
state = hass.states.get(entity_id)
|
|
|
|
reference = REFERENCE[state.attributes.get("device")]
|
|
|
|
assert state.attributes.get("friendly_name") == f"FooBar {reference['device']}"
|
|
|
|
|
|
async def test_hddtemp_one_disk(hass: HomeAssistant, telnetmock) -> None:
|
|
"""Test hddtemp one disk configuration."""
|
|
assert await async_setup_component(hass, "sensor", VALID_CONFIG_ONE_DISK)
|
|
await hass.async_block_till_done()
|
|
|
|
state = hass.states.get("sensor.hd_temperature_dev_sdd1")
|
|
|
|
reference = REFERENCE[state.attributes.get("device")]
|
|
|
|
assert round(float(state.state), 0) == float(reference["temperature"])
|
|
assert state.attributes.get("device") == reference["device"]
|
|
assert state.attributes.get("model") == reference["model"]
|
|
assert (
|
|
state.attributes.get("unit_of_measurement") == reference["unit_of_measurement"]
|
|
)
|
|
assert (
|
|
state.attributes.get("friendly_name") == f"HD Temperature {reference['device']}"
|
|
)
|
|
|
|
|
|
async def test_hddtemp_wrong_disk(hass: HomeAssistant, telnetmock) -> None:
|
|
"""Test hddtemp wrong disk configuration."""
|
|
assert await async_setup_component(hass, "sensor", VALID_CONFIG_WRONG_DISK)
|
|
await hass.async_block_till_done()
|
|
|
|
assert len(hass.states.async_all()) == 1
|
|
state = hass.states.get("sensor.hd_temperature_dev_sdx1")
|
|
assert state.attributes.get("friendly_name") == "HD Temperature /dev/sdx1"
|
|
|
|
|
|
async def test_hddtemp_multiple_disks(hass: HomeAssistant, telnetmock) -> None:
|
|
"""Test hddtemp multiple disk configuration."""
|
|
assert await async_setup_component(hass, "sensor", VALID_CONFIG_MULTIPLE_DISKS)
|
|
await hass.async_block_till_done()
|
|
|
|
for sensor in (
|
|
"sensor.hd_temperature_dev_sda1",
|
|
"sensor.hd_temperature_dev_sdb1",
|
|
"sensor.hd_temperature_dev_sdc1",
|
|
):
|
|
state = hass.states.get(sensor)
|
|
|
|
reference = REFERENCE[state.attributes.get("device")]
|
|
|
|
assert state.state == reference["temperature"]
|
|
assert state.attributes.get("device") == reference["device"]
|
|
assert state.attributes.get("model") == reference["model"]
|
|
assert (
|
|
state.attributes.get("unit_of_measurement")
|
|
== reference["unit_of_measurement"]
|
|
)
|
|
assert (
|
|
state.attributes.get("friendly_name")
|
|
== f"HD Temperature {reference['device']}"
|
|
)
|
|
|
|
|
|
async def test_hddtemp_host_refused(hass: HomeAssistant, telnetmock) -> None:
|
|
"""Test hddtemp if host is refused."""
|
|
assert await async_setup_component(hass, "sensor", VALID_CONFIG_HOST_REFUSED)
|
|
await hass.async_block_till_done()
|
|
assert len(hass.states.async_all()) == 0
|
|
|
|
|
|
async def test_hddtemp_host_unreachable(hass: HomeAssistant, telnetmock) -> None:
|
|
"""Test hddtemp if host unreachable."""
|
|
assert await async_setup_component(hass, "sensor", VALID_CONFIG_HOST_UNREACHABLE)
|
|
await hass.async_block_till_done()
|
|
assert len(hass.states.async_all()) == 0
|