File: get_limitation_test.py

package info (click to toggle)
pyvlx 0.2.30-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,556 kB
  • sloc: python: 8,100; makefile: 38; sh: 5
file content (101 lines) | stat: -rw-r--r-- 3,955 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
"""Unit test for limitation."""
import asyncio
import unittest
from unittest.mock import MagicMock

import pytest
from pytest import FixtureRequest

from pyvlx import PyVLX
from pyvlx.api.frames.frame_get_limitation import (
    FrameGetLimitationStatus, FrameGetLimitationStatusConfirmation,
    FrameGetLimitationStatusNotification)
from pyvlx.api.get_limitation import GetLimitation
from pyvlx.const import LimitationType, Originator


@pytest.fixture(scope="class")
def event_loop_instance(request: FixtureRequest) -> None:
    """Add the event_loop as an attribute to the unittest style test class."""
    request.cls.event_loop = asyncio.get_event_loop_policy().new_event_loop()
    yield
    request.cls.event_loop.close()


# pylint: disable=too-many-public-methods,invalid-name
@pytest.mark.usefixtures("event_loop_instance")
class TestGetLimitation(unittest.TestCase):
    """Test class for Limitation."""

    def setUp(self) -> None:
        """Set up TestGetLimitation."""
        self.pyvlx = MagicMock(spec=PyVLX)

    def test_get_name(self) -> None:
        """Test get_name()."""
        limit = GetLimitation(self.pyvlx, 1)
        self.assertEqual(limit.node_id, 1)
        self.assertEqual(limit.limitation_type, LimitationType.MIN_LIMITATION)
        limit = GetLimitation(self.pyvlx, 2, LimitationType.MAX_LIMITATION)
        self.assertEqual(limit.node_id, 2)
        self.assertEqual(limit.limitation_type, LimitationType.MAX_LIMITATION)

    def test_max_value(self) -> None:
        """Test limit.max_value."""
        limit = GetLimitation(self.pyvlx, 1)
        limit.max_value_raw = b'\xf7'
        self.assertEqual(limit.max_value, 124)

    def test_min_value(self) -> None:
        """Test limit.min_value."""
        limit = GetLimitation(self.pyvlx, 1)
        limit.min_value_raw = b'\xba'
        self.assertEqual(limit.min_value, 93)

    def test_handle_frame(self) -> None:
        """Test handle frame."""
        limit = GetLimitation(self.pyvlx, 1)

        frame = FrameGetLimitationStatus()
        self.assertFalse(self.event_loop.run_until_complete(limit.handle_frame(frame)))
        self.assertFalse(limit.success)

        frame = FrameGetLimitationStatusConfirmation()
        self.assertFalse(self.event_loop.run_until_complete(limit.handle_frame(frame)))
        self.assertFalse(limit.success)

        frame = FrameGetLimitationStatusNotification()
        frame.session_id = 1
        frame.node_id = 1
        frame.min_value = b'\xf7'
        frame.max_value = b'\xba'
        frame.limit_originator = Originator.USER
        frame.limit_time = 1

        limit.session_id = 0
        self.assertFalse(self.event_loop.run_until_complete(limit.handle_frame(frame)))
        self.assertFalse(limit.success)  # Session id is wrong

        limit.session_id = frame.session_id
        self.assertTrue(self.event_loop.run_until_complete(limit.handle_frame(frame)))
        self.assertTrue(limit.success)
        self.assertEqual(limit.node_id, frame.node_id)
        self.assertEqual(limit.session_id, frame.session_id)
        self.assertEqual(limit.min_value, 124)
        self.assertEqual(limit.max_value, 93)
        self.assertEqual(limit.originator, frame.limit_originator)
        self.assertEqual(limit.limit_time, frame.limit_time)

    def test_request_frame(self) -> None:
        """Test initiating frame."""
        limit = GetLimitation(self.pyvlx, 1)
        req_frame = limit.request_frame()
        self.assertIsInstance(req_frame, FrameGetLimitationStatus)
        self.assertTrue(req_frame.session_id, 1)
        self.assertTrue(req_frame.node_ids, [1])
        self.assertTrue(req_frame.limitations_type, limit.limitation_type)

        limit.limitation_type = LimitationType.MAX_LIMITATION
        self.assertIsInstance(req_frame, FrameGetLimitationStatus)
        self.assertTrue(req_frame.session_id, 1)
        self.assertTrue(req_frame.limitations_type, limit.limitation_type)