zwave-js-server-python/test/model/test_utils.py

116 lines
3.8 KiB
Python

"""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