File: nodes_test.py

package info (click to toggle)
pyvlx 0.2.26-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 4,464 kB
  • sloc: python: 7,901; makefile: 39; sh: 5
file content (122 lines) | stat: -rw-r--r-- 5,067 bytes parent folder | download | duplicates (2)
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
"""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.node import Node

# pylint: disable=too-many-public-methods,invalid-name


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",
        )
        self.assertEqual(
            str(node),
            '<Node name="Test Abstract Node" node_id="23" serial_number="aa:bb:aa:bb:aa:bb:aa:23"/>',
        )