1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
"""Unit test for Nodes object."""
import unittest
from unittest.mock import MagicMock
from pyvlx import Blind, Nodes, PyVLX, RollerShutter, Window
from pyvlx.connection import Connection
from pyvlx.const import OperatingState, StatusReply
from pyvlx.node import Node
class TestNodes(unittest.TestCase):
"""Test class for nodes object."""
def setUp(self) -> None:
"""Set up TestNodes."""
self.pyvlx = MagicMock(spec=PyVLX)
connection = MagicMock(spec=Connection)
self.pyvlx.attach_mock(mock=connection, attribute="connection")
def test_get_item(self) -> None:
"""Test get_item."""
nodes = Nodes(self.pyvlx)
window = Window(self.pyvlx, 0, "Window", "aa:bb:aa:bb:aa:bb:aa:00")
nodes.add(window)
blind = Blind(self.pyvlx, 1, "Blind", "aa:bb:aa:bb:aa:bb:aa:01")
nodes.add(blind)
roller_shutter = RollerShutter(
self.pyvlx, 4, "Roller Shutter", "aa:bb:aa:bb:aa:bb:aa:04"
)
nodes.add(roller_shutter)
self.assertEqual(nodes["Window"], window)
self.assertEqual(nodes["Blind"], blind)
self.assertEqual(nodes["Roller Shutter"], roller_shutter)
self.assertEqual(nodes[0], window)
self.assertEqual(nodes[1], blind)
self.assertEqual(nodes[4], roller_shutter)
def test_get_item_failed(self) -> None:
"""Test get_item with non existing object."""
nodes = Nodes(self.pyvlx)
window1 = Window(self.pyvlx, 0, "Window_1", "aa:bb:aa:bb:aa:bb:aa:00")
nodes.add(window1)
with self.assertRaises(KeyError):
nodes["Window_2"] # pylint: disable=pointless-statement
with self.assertRaises(KeyError):
nodes[1] # pylint: disable=pointless-statement
def test_contains_item(self) -> None:
"""Test contains operator."""
nodes = Nodes(self.pyvlx)
window1 = Window(self.pyvlx, 23, "Window_1", "aa:bb:aa:bb:aa:bb:aa:23")
nodes.add(window1)
window2 = Window(self.pyvlx, 42, "Window_2", "aa:bb:aa:bb:aa:bb:aa:42") # not added
self.assertTrue("Window_1" in nodes)
self.assertTrue(23 in nodes)
self.assertTrue(window1 in nodes)
self.assertFalse("Window_2" in nodes)
self.assertFalse(42 in nodes)
self.assertFalse(window2 in nodes)
def test_iter(self) -> None:
"""Test iterator."""
nodes = Nodes(self.pyvlx)
window1 = Window(self.pyvlx, 0, "Window_1", "aa:bb:aa:bb:aa:bb:aa:00")
nodes.add(window1)
window2 = Window(self.pyvlx, 1, "Window_2", "aa:bb:aa:bb:aa:bb:aa:01")
nodes.add(window2)
window3 = Window(self.pyvlx, 2, "Window_3", "aa:bb:aa:bb:aa:bb:aa:02")
nodes.add(window3)
self.assertEqual(tuple(nodes.__iter__()), (window1, window2, window3)) # pylint: disable=unnecessary-dunder-call
def test_len(self) -> None:
"""Test len."""
nodes = Nodes(self.pyvlx)
self.assertEqual(len(nodes), 0)
nodes.add(Window(self.pyvlx, 0, "Window_1", "aa:bb:aa:bb:aa:bb:aa:00"))
nodes.add(Window(self.pyvlx, 1, "Window_2", "aa:bb:aa:bb:aa:bb:aa:01"))
nodes.add(Window(self.pyvlx, 2, "Window_3", "aa:bb:aa:bb:aa:bb:aa:02"))
nodes.add(Window(self.pyvlx, 3, "Window_4", "aa:bb:aa:bb:aa:bb:aa:03"))
self.assertEqual(len(nodes), 4)
def test_add_same_object(self) -> None:
"""Test adding object with same node_id."""
nodes = Nodes(self.pyvlx)
self.assertEqual(len(nodes), 0)
nodes.add(Window(self.pyvlx, 0, "Window_1", "aa:bb:aa:bb:aa:bb:aa:00"))
nodes.add(Window(self.pyvlx, 1, "Window_2", "aa:bb:aa:bb:aa:bb:aa:01"))
nodes.add(Window(self.pyvlx, 2, "Window_3", "aa:bb:aa:bb:aa:bb:aa:02"))
nodes.add(Window(self.pyvlx, 1, "Window_2_same_id", "aa:bb:aa:bb:aa:bb:aa:01"))
self.assertEqual(len(nodes), 3)
self.assertEqual(nodes[1].name, "Window_2_same_id")
def test_add_item_failed(self) -> None:
"""Test add() with wrong type."""
nodes = Nodes(self.pyvlx)
with self.assertRaises(TypeError):
nodes.add(nodes) # type: ignore
with self.assertRaises(TypeError):
nodes.add("device") # type: ignore
def test_clear(self) -> None:
"""Test clear() method."""
nodes = Nodes(self.pyvlx)
self.assertEqual(len(nodes), 0)
nodes.add(Window(self.pyvlx, 0, "Window_1", "aa:bb:aa:bb:aa:bb:aa:00"))
nodes.add(Window(self.pyvlx, 1, "Window_2", "aa:bb:aa:bb:aa:bb:aa:01"))
nodes.clear()
self.assertEqual(len(nodes), 0)
def test_node_str(self) -> None:
"""Test string representation of node."""
node = Node(
pyvlx=self.pyvlx,
node_id=23,
name="Test Abstract Node",
serial_number="aa:bb:aa:bb:aa:bb:aa:23",
)
node.last_frame_state = OperatingState.EXECUTING
node.last_frame_status_reply = StatusReply.BATTERY_LEVEL
self.assertEqual(
str(node),
'<Node name="Test Abstract Node" node_id="23" serial_number="aa:bb:aa:bb:aa:bb:aa:23" '
'last_frame_state="OperatingState.EXECUTING" last_frame_status_reply="StatusReply.BATTERY_LEVEL"/>',
)
|