mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Small huawei_lte improvements (#16626)
* Add bunch of RouterData tests * Avoid raising AttributeError from RouterData.__getitem__ * Use new style string formatting * Use {key: value} instead of dict(key=value)
This commit is contained in:
parent
0c945d81c8
commit
e054e4da1b
@ -55,8 +55,12 @@ class RouterData:
|
|||||||
such as device_information, device_signal etc, and the remaining
|
such as device_information, device_signal etc, and the remaining
|
||||||
path points to a value in the member's data structure.
|
path points to a value in the member's data structure.
|
||||||
"""
|
"""
|
||||||
cat, *path_ = path.split(".")
|
root, *rest = path.split(".")
|
||||||
return reduce(operator.getitem, path_, getattr(self, cat))
|
try:
|
||||||
|
data = getattr(self, root)
|
||||||
|
except AttributeError as err:
|
||||||
|
raise KeyError from err
|
||||||
|
return reduce(operator.getitem, rest, data)
|
||||||
|
|
||||||
@Throttle(MIN_TIME_BETWEEN_UPDATES)
|
@Throttle(MIN_TIME_BETWEEN_UPDATES)
|
||||||
def update(self) -> None:
|
def update(self) -> None:
|
||||||
|
@ -113,7 +113,7 @@ class HuaweiLteSensor(Entity):
|
|||||||
@property
|
@property
|
||||||
def unique_id(self) -> str:
|
def unique_id(self) -> str:
|
||||||
"""Return unique ID for sensor."""
|
"""Return unique ID for sensor."""
|
||||||
return "%s_%s" % (
|
return "{}_{}".format(
|
||||||
self.path,
|
self.path,
|
||||||
self.data["device_information.SerialNumber"],
|
self.data["device_information.SerialNumber"],
|
||||||
)
|
)
|
||||||
|
48
tests/components/huawei_lte.py
Normal file
48
tests/components/huawei_lte.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
"""Huawei LTE component tests."""
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from homeassistant.components import huawei_lte
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def routerdata():
|
||||||
|
"""Set up a router data for testing."""
|
||||||
|
rd = huawei_lte.RouterData(None)
|
||||||
|
rd.device_information = {
|
||||||
|
'SoftwareVersion': '1.0',
|
||||||
|
'nested': {'foo': 'bar'},
|
||||||
|
}
|
||||||
|
return rd
|
||||||
|
|
||||||
|
|
||||||
|
async def test_routerdata_get_nonexistent_root(routerdata):
|
||||||
|
"""Test that accessing a nonexistent root element raises KeyError."""
|
||||||
|
with pytest.raises(KeyError): # NOT AttributeError
|
||||||
|
routerdata["nonexistent_root.foo"]
|
||||||
|
|
||||||
|
|
||||||
|
async def test_routerdata_get_nonexistent_leaf(routerdata):
|
||||||
|
"""Test that accessing a nonexistent leaf element raises KeyError."""
|
||||||
|
with pytest.raises(KeyError):
|
||||||
|
routerdata["device_information.foo"]
|
||||||
|
|
||||||
|
|
||||||
|
async def test_routerdata_get_nonexistent_leaf_path(routerdata):
|
||||||
|
"""Test that accessing a nonexistent long path raises KeyError."""
|
||||||
|
with pytest.raises(KeyError):
|
||||||
|
routerdata["device_information.long.path.foo"]
|
||||||
|
|
||||||
|
|
||||||
|
async def test_routerdata_get_simple(routerdata):
|
||||||
|
"""Test that accessing a short, simple path works."""
|
||||||
|
assert routerdata["device_information.SoftwareVersion"] == "1.0"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_routerdata_get_longer(routerdata):
|
||||||
|
"""Test that accessing a longer path works."""
|
||||||
|
assert routerdata["device_information.nested.foo"] == "bar"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_routerdata_get_dict(routerdata):
|
||||||
|
"""Test that returning an intermediate dict works."""
|
||||||
|
assert routerdata["device_information.nested"] == {'foo': 'bar'}
|
Loading…
x
Reference in New Issue
Block a user