File: test_utils.py

package info (click to toggle)
zwave-js-server-python 0.67.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,820 kB
  • sloc: python: 15,886; sh: 21; javascript: 16; makefile: 2
file content (115 lines) | stat: -rw-r--r-- 3,925 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
"""Test general utility functions."""

import pytest

from zwave_js_server.const import (
    Protocols,
    ProvisioningEntryStatus,
    QRCodeVersion,
    SecurityClass,
)
from zwave_js_server.model.utils import (
    async_parse_qr_code_string,
    async_try_parse_dsk_from_qr_code_string,
)


async def test_parse_qr_code_string(client, mock_command, uuid4):
    """Test parsing a QR code string."""
    ack_commands = mock_command(
        {"command": "utils.parse_qr_code_string"},
        {
            "qrProvisioningInformation": {
                "version": 0,
                "securityClasses": [0, 1, 2],
                "requestedSecurityClasses": [0],
                "status": 1,
                "dsk": "test",
                "genericDeviceClass": 1,
                "specificDeviceClass": 1,
                "installerIconType": 1,
                "manufacturerId": 1,
                "productType": 1,
                "productId": 1,
                "applicationVersion": "test",
                "maxInclusionRequestInterval": 1,
                "uuid": "test",
                "supportedProtocols": [0],
            }
        },
    )
    qr_provisioning_info = await async_parse_qr_code_string(
        client, "90testtesttesttesttesttesttesttesttesttesttesttesttest"
    )
    assert ack_commands[0] == {
        "command": "utils.parse_qr_code_string",
        "qr": "90testtesttesttesttesttesttesttesttesttesttesttesttest",
        "messageId": uuid4,
    }
    assert qr_provisioning_info.version == QRCodeVersion.S2
    assert set(qr_provisioning_info.security_classes) == {
        SecurityClass.S2_ACCESS_CONTROL,
        SecurityClass.S2_AUTHENTICATED,
        SecurityClass.S2_UNAUTHENTICATED,
    }
    assert qr_provisioning_info.requested_security_classes == [
        SecurityClass.S2_UNAUTHENTICATED
    ]
    assert qr_provisioning_info.status == ProvisioningEntryStatus.INACTIVE
    assert (
        qr_provisioning_info.dsk
        == qr_provisioning_info.application_version
        == qr_provisioning_info.uuid
        == "test"
    )
    assert (
        qr_provisioning_info.generic_device_class
        == qr_provisioning_info.specific_device_class
        == qr_provisioning_info.installer_icon_type
        == qr_provisioning_info.manufacturer_id
        == qr_provisioning_info.product_type
        == qr_provisioning_info.product_id
        == qr_provisioning_info.max_inclusion_request_interval
        == 1
    )
    assert qr_provisioning_info.supported_protocols == [Protocols.ZWAVE]

    # Test invalid QR code length fails
    with pytest.raises(ValueError):
        await async_parse_qr_code_string(client, "test")


async def test_async_try_parse_dsk_from_qr_code_string(client, mock_command, uuid4):
    """Test trying to parse a DSK from a qr code string."""
    ack_commands = mock_command(
        {"command": "utils.try_parse_dsk_from_qr_code_string"}, {"dsk": "abc"}
    )
    dsk = await async_try_parse_dsk_from_qr_code_string(
        client, "90testtesttesttesttesttesttesttesttesttesttesttesttest"
    )
    assert ack_commands[0] == {
        "command": "utils.try_parse_dsk_from_qr_code_string",
        "qr": "90testtesttesttesttesttesttesttesttesttesttesttesttest",
        "messageId": uuid4,
    }
    assert dsk == "abc"


async def test_async_try_parse_dsk_from_qr_code_string_fails(
    client, mock_command, uuid4
):
    """Test trying to parse a DSK from a qr code string fails."""

    ack_commands = mock_command(
        {"command": "utils.try_parse_dsk_from_qr_code_string"}, {}
    )

    dsk = await async_try_parse_dsk_from_qr_code_string(
        client, "90testtesttesttesttesttesttesttesttesttesttesttesttest"
    )
    assert ack_commands[0] == {
        "command": "utils.try_parse_dsk_from_qr_code_string",
        "qr": "90testtesttesttesttesttesttesttesttesttesttesttesttest",
        "messageId": uuid4,
    }
    assert dsk is None