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:
Ville Skyttä 2018-09-15 10:42:36 +03:00 committed by GitHub
parent 0c945d81c8
commit e054e4da1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 3 deletions

View File

@ -55,8 +55,12 @@ class RouterData:
such as device_information, device_signal etc, and the remaining
path points to a value in the member's data structure.
"""
cat, *path_ = path.split(".")
return reduce(operator.getitem, path_, getattr(self, cat))
root, *rest = path.split(".")
try:
data = getattr(self, root)
except AttributeError as err:
raise KeyError from err
return reduce(operator.getitem, rest, data)
@Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self) -> None:

View File

@ -113,7 +113,7 @@ class HuaweiLteSensor(Entity):
@property
def unique_id(self) -> str:
"""Return unique ID for sensor."""
return "%s_%s" % (
return "{}_{}".format(
self.path,
self.data["device_information.SerialNumber"],
)

View 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'}