Rewrite zwave node entity tests to pytest style test function (#41239)

This commit is contained in:
Rob Bierbooms 2020-10-05 14:29:15 +02:00 committed by GitHub
parent c02d9050b7
commit 5745e64cab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,8 +1,4 @@
"""Test Z-Wave node entity.""" """Test Z-Wave node entity."""
import unittest
import pytest
from homeassistant.components.zwave import const, node_entity from homeassistant.components.zwave import const, node_entity
from homeassistant.const import ATTR_ENTITY_ID from homeassistant.const import ATTR_ENTITY_ID
@ -235,436 +231,492 @@ async def test_application_version(hass, mock_openzwave):
) )
@pytest.mark.usefixtures("mock_openzwave") async def test_network_node_changed_from_value(hass, mock_openzwave):
class TestZWaveNodeEntity(unittest.TestCase): """Test for network_node_changed."""
"""Class to test ZWaveNodeEntity.""" zwave_network = MagicMock()
node = mock_zwave.MockNode()
entity = node_entity.ZWaveNodeEntity(node, zwave_network)
value = mock_zwave.MockValue(node=node)
with patch.object(entity, "maybe_schedule_update") as mock:
mock_zwave.value_changed(value)
mock.assert_called_once_with()
def setUp(self):
"""Initialize values for this testcase class."""
self.zwave_network = MagicMock()
self.node = mock_zwave.MockNode(
query_stage="Dynamic",
is_awake=True,
is_ready=False,
is_failed=False,
is_info_received=True,
max_baud_rate=40000,
is_zwave_plus=False,
capabilities=[],
neighbors=[],
location=None,
)
self.entity = node_entity.ZWaveNodeEntity(self.node, self.zwave_network)
def test_network_node_changed_from_value(self): async def test_network_node_changed_from_node(hass, mock_openzwave):
"""Test for network_node_changed.""" """Test for network_node_changed."""
value = mock_zwave.MockValue(node=self.node) zwave_network = MagicMock()
with patch.object(self.entity, "maybe_schedule_update") as mock: node = mock_zwave.MockNode()
mock_zwave.value_changed(value) entity = node_entity.ZWaveNodeEntity(node, zwave_network)
mock.assert_called_once_with() with patch.object(entity, "maybe_schedule_update") as mock:
mock_zwave.node_changed(node)
mock.assert_called_once_with()
def test_network_node_changed_from_node(self):
"""Test for network_node_changed."""
with patch.object(self.entity, "maybe_schedule_update") as mock:
mock_zwave.node_changed(self.node)
mock.assert_called_once_with()
def test_network_node_changed_from_another_node(self): async def test_network_node_changed_from_another_node(hass, mock_openzwave):
"""Test for network_node_changed.""" """Test for network_node_changed."""
with patch.object(self.entity, "maybe_schedule_update") as mock: zwave_network = MagicMock()
node = mock_zwave.MockNode(node_id=1024) node = mock_zwave.MockNode()
mock_zwave.node_changed(node) entity = node_entity.ZWaveNodeEntity(node, zwave_network)
assert not mock.called with patch.object(entity, "maybe_schedule_update") as mock:
another_node = mock_zwave.MockNode(node_id=1024)
mock_zwave.node_changed(another_node)
assert not mock.called
def test_network_node_changed_from_notification(self):
"""Test for network_node_changed."""
with patch.object(self.entity, "maybe_schedule_update") as mock:
mock_zwave.notification(node_id=self.node.node_id)
mock.assert_called_once_with()
def test_network_node_changed_from_another_notification(self): async def test_network_node_changed_from_notification(hass, mock_openzwave):
"""Test for network_node_changed.""" """Test for network_node_changed."""
with patch.object(self.entity, "maybe_schedule_update") as mock: zwave_network = MagicMock()
mock_zwave.notification(node_id=1024) node = mock_zwave.MockNode()
assert not mock.called entity = node_entity.ZWaveNodeEntity(node, zwave_network)
with patch.object(entity, "maybe_schedule_update") as mock:
mock_zwave.notification(node_id=node.node_id)
mock.assert_called_once_with()
def test_node_changed(self):
"""Test node_changed function."""
self.maxDiff = None
assert {
"node_id": self.node.node_id,
"node_name": "Mock Node",
"manufacturer_name": "Test Manufacturer",
"product_name": "Test Product",
} == self.entity.device_state_attributes
self.node.get_values.return_value = {1: mock_zwave.MockValue(data=1800)} async def test_network_node_changed_from_another_notification(hass, mock_openzwave):
self.zwave_network.manager.getNodeStatistics.return_value = { """Test for network_node_changed."""
"receivedCnt": 4, zwave_network = MagicMock()
"ccData": [ node = mock_zwave.MockNode()
{"receivedCnt": 0, "commandClassId": 134, "sentCnt": 0}, entity = node_entity.ZWaveNodeEntity(node, zwave_network)
{"receivedCnt": 1, "commandClassId": 133, "sentCnt": 1}, with patch.object(entity, "maybe_schedule_update") as mock:
{"receivedCnt": 1, "commandClassId": 115, "sentCnt": 1}, mock_zwave.notification(node_id=1024)
{"receivedCnt": 0, "commandClassId": 114, "sentCnt": 0}, assert not mock.called
{"receivedCnt": 0, "commandClassId": 112, "sentCnt": 0},
{"receivedCnt": 1, "commandClassId": 32, "sentCnt": 1},
{"receivedCnt": 0, "commandClassId": 0, "sentCnt": 0},
],
"receivedUnsolicited": 0,
"sentTS": "2017-03-27 15:38:15:620 ",
"averageRequestRTT": 2462,
"lastResponseRTT": 3679,
"retries": 0,
"sentFailed": 1,
"sentCnt": 7,
"quality": 0,
"lastRequestRTT": 1591,
"lastReceivedMessage": [
0,
4,
0,
15,
3,
32,
3,
0,
221,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
],
"receivedDups": 1,
"averageResponseRTT": 2443,
"receivedTS": "2017-03-27 15:38:19:298 ",
}
self.entity.node_changed()
assert {
"node_id": self.node.node_id,
"node_name": "Mock Node",
"manufacturer_name": "Test Manufacturer",
"product_name": "Test Product",
"query_stage": "Dynamic",
"is_awake": True,
"is_ready": False,
"is_failed": False,
"is_info_received": True,
"max_baud_rate": 40000,
"is_zwave_plus": False,
"battery_level": 42,
"wake_up_interval": 1800,
"averageRequestRTT": 2462,
"averageResponseRTT": 2443,
"lastRequestRTT": 1591,
"lastResponseRTT": 3679,
"receivedCnt": 4,
"receivedDups": 1,
"receivedTS": "2017-03-27 15:38:19:298 ",
"receivedUnsolicited": 0,
"retries": 0,
"sentCnt": 7,
"sentFailed": 1,
"sentTS": "2017-03-27 15:38:15:620 ",
} == self.entity.device_state_attributes
self.node.can_wake_up_value = False
self.entity.node_changed()
assert "wake_up_interval" not in self.entity.device_state_attributes async def test_node_changed(hass, mock_openzwave):
"""Test node_changed function."""
zwave_network = MagicMock()
node = mock_zwave.MockNode(
query_stage="Dynamic",
is_awake=True,
is_ready=False,
is_failed=False,
is_info_received=True,
max_baud_rate=40000,
is_zwave_plus=False,
capabilities=[],
neighbors=[],
location=None,
)
entity = node_entity.ZWaveNodeEntity(node, zwave_network)
def test_name(self): assert {
"""Test name property.""" "node_id": node.node_id,
assert self.entity.name == "Mock Node" "node_name": "Mock Node",
"manufacturer_name": "Test Manufacturer",
"product_name": "Test Product",
} == entity.device_state_attributes
def test_state_before_update(self): node.get_values.return_value = {1: mock_zwave.MockValue(data=1800)}
"""Test state before update was called.""" zwave_network.manager.getNodeStatistics.return_value = {
assert self.entity.state is None "receivedCnt": 4,
"ccData": [
{"receivedCnt": 0, "commandClassId": 134, "sentCnt": 0},
{"receivedCnt": 1, "commandClassId": 133, "sentCnt": 1},
{"receivedCnt": 1, "commandClassId": 115, "sentCnt": 1},
{"receivedCnt": 0, "commandClassId": 114, "sentCnt": 0},
{"receivedCnt": 0, "commandClassId": 112, "sentCnt": 0},
{"receivedCnt": 1, "commandClassId": 32, "sentCnt": 1},
{"receivedCnt": 0, "commandClassId": 0, "sentCnt": 0},
],
"receivedUnsolicited": 0,
"sentTS": "2017-03-27 15:38:15:620 ",
"averageRequestRTT": 2462,
"lastResponseRTT": 3679,
"retries": 0,
"sentFailed": 1,
"sentCnt": 7,
"quality": 0,
"lastRequestRTT": 1591,
"lastReceivedMessage": [
0,
4,
0,
15,
3,
32,
3,
0,
221,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
],
"receivedDups": 1,
"averageResponseRTT": 2443,
"receivedTS": "2017-03-27 15:38:19:298 ",
}
entity.node_changed()
assert {
"node_id": node.node_id,
"node_name": "Mock Node",
"manufacturer_name": "Test Manufacturer",
"product_name": "Test Product",
"query_stage": "Dynamic",
"is_awake": True,
"is_ready": False,
"is_failed": False,
"is_info_received": True,
"max_baud_rate": 40000,
"is_zwave_plus": False,
"battery_level": 42,
"wake_up_interval": 1800,
"averageRequestRTT": 2462,
"averageResponseRTT": 2443,
"lastRequestRTT": 1591,
"lastResponseRTT": 3679,
"receivedCnt": 4,
"receivedDups": 1,
"receivedTS": "2017-03-27 15:38:19:298 ",
"receivedUnsolicited": 0,
"retries": 0,
"sentCnt": 7,
"sentFailed": 1,
"sentTS": "2017-03-27 15:38:15:620 ",
} == entity.device_state_attributes
def test_state_not_ready(self): node.can_wake_up_value = False
"""Test state property.""" entity.node_changed()
self.node.is_ready = False
self.entity.node_changed()
assert self.entity.state == "initializing"
self.node.is_failed = True assert "wake_up_interval" not in entity.device_state_attributes
self.node.query_stage = "Complete"
self.entity.node_changed()
assert self.entity.state == "dead"
self.node.is_failed = False
self.node.is_awake = False
self.entity.node_changed()
assert self.entity.state == "sleeping"
def test_state_ready(self): async def test_name(hass, mock_openzwave):
"""Test state property.""" """Test name property."""
self.node.query_stage = "Complete" zwave_network = MagicMock()
self.node.is_ready = True node = mock_zwave.MockNode()
self.entity.node_changed() entity = node_entity.ZWaveNodeEntity(node, zwave_network)
assert self.entity.state == "ready" assert entity.name == "Mock Node"
self.node.is_failed = True
self.entity.node_changed()
assert self.entity.state == "dead"
self.node.is_failed = False async def test_state_before_update(hass, mock_openzwave):
self.node.is_awake = False """Test state before update was called."""
self.entity.node_changed() zwave_network = MagicMock()
assert self.entity.state == "sleeping" node = mock_zwave.MockNode()
entity = node_entity.ZWaveNodeEntity(node, zwave_network)
assert entity.state is None
def test_not_polled(self):
"""Test should_poll property."""
assert not self.entity.should_poll
def test_unique_id(self): async def test_state_not_ready(hass, mock_openzwave):
"""Test unique_id.""" """Test state property."""
assert self.entity.unique_id == "node-567" zwave_network = MagicMock()
node = mock_zwave.MockNode(
query_stage="Dynamic",
is_awake=True,
is_ready=False,
is_failed=False,
is_info_received=True,
)
entity = node_entity.ZWaveNodeEntity(node, zwave_network)
def test_unique_id_missing_data(self): node.is_ready = False
"""Test unique_id.""" entity.node_changed()
self.node.manufacturer_name = None assert entity.state == "initializing"
self.node.name = None
entity = node_entity.ZWaveNodeEntity(self.node, self.zwave_network)
assert entity.unique_id is None node.is_failed = True
node.query_stage = "Complete"
entity.node_changed()
assert entity.state == "dead"
node.is_failed = False
node.is_awake = False
entity.node_changed()
assert entity.state == "sleeping"
async def test_state_ready(hass, mock_openzwave):
"""Test state property."""
zwave_network = MagicMock()
node = mock_zwave.MockNode(
query_stage="Dynamic",
is_awake=True,
is_ready=False,
is_failed=False,
is_info_received=True,
)
entity = node_entity.ZWaveNodeEntity(node, zwave_network)
node.query_stage = "Complete"
node.is_ready = True
entity.node_changed()
await hass.async_block_till_done()
assert entity.state == "ready"
node.is_failed = True
entity.node_changed()
assert entity.state == "dead"
node.is_failed = False
node.is_awake = False
entity.node_changed()
assert entity.state == "sleeping"
async def test_not_polled(hass, mock_openzwave):
"""Test should_poll property."""
zwave_network = MagicMock()
node = mock_zwave.MockNode()
entity = node_entity.ZWaveNodeEntity(node, zwave_network)
assert not entity.should_poll
async def test_unique_id(hass, mock_openzwave):
"""Test unique_id."""
zwave_network = MagicMock()
node = mock_zwave.MockNode()
entity = node_entity.ZWaveNodeEntity(node, zwave_network)
assert entity.unique_id == "node-567"
async def test_unique_id_missing_data(hass, mock_openzwave):
"""Test unique_id."""
zwave_network = MagicMock()
node = mock_zwave.MockNode()
node.manufacturer_name = None
node.name = None
node.is_ready = False
entity = node_entity.ZWaveNodeEntity(node, zwave_network)
assert entity.unique_id is None