Implement config flow in the Broadlink integration (#36914)
* Implement config flow in the Broadlink integration * General improvements to the Broadlink config flow * Remove unnecessary else after return * Fix translations * Rename device to device_entry * Add tests for the config flow * Improve docstrings * Test we do not accept more than one config entry per device * Improve helpers * Allow empty packets * Allow multiple config files for switches related to the same device * Rename mock_device to mock_api * General improvements * Make new attempts before marking the device as unavailable * Let the name be the template for the entity_id * Handle OSError * Test network unavailable in the configuration flow * Rename lock attribute * Update manifest.json * Import devices from platforms * Test import flow * Add deprecation warnings * General improvements * Rename deprecate to discontinue * Test device setup * Add type attribute to mock api * Test we handle an update failure at startup * Remove BroadlinkDevice from tests * Remove device.py from .coveragerc * Add tests for the config flow * Add tests for the device * Test device registry and update listener * Test MAC address validation * Add tests for the device * Extract domains and types to a helper function * Do not patch integration details * Add tests for the device * Set device classes where appropriate * Set an appropriate connection class * Do not set device class for custom switches * Fix tests and improve code readability * Use RM4 to test authentication errors * Handle BroadlinkException in the authentication
This commit is contained in:
parent
eb4f667a1a
commit
a2c1f08c8c
21 changed files with 2497 additions and 795 deletions
54
tests/components/broadlink/test_helpers.py
Normal file
54
tests/components/broadlink/test_helpers.py
Normal file
|
@ -0,0 +1,54 @@
|
|||
"""Tests for Broadlink helper functions."""
|
||||
import pytest
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.broadlink.helpers import data_packet, mac_address
|
||||
|
||||
|
||||
async def test_padding(hass):
|
||||
"""Verify that non padding strings are allowed."""
|
||||
assert data_packet("Jg") == b"&"
|
||||
assert data_packet("Jg=") == b"&"
|
||||
assert data_packet("Jg==") == b"&"
|
||||
|
||||
|
||||
async def test_valid_mac_address(hass):
|
||||
"""Test we convert a valid MAC address to bytes."""
|
||||
valid = [
|
||||
"A1B2C3D4E5F6",
|
||||
"a1b2c3d4e5f6",
|
||||
"A1B2-C3D4-E5F6",
|
||||
"a1b2-c3d4-e5f6",
|
||||
"A1B2.C3D4.E5F6",
|
||||
"a1b2.c3d4.e5f6",
|
||||
"A1-B2-C3-D4-E5-F6",
|
||||
"a1-b2-c3-d4-e5-f6",
|
||||
"A1:B2:C3:D4:E5:F6",
|
||||
"a1:b2:c3:d4:e5:f6",
|
||||
]
|
||||
for mac in valid:
|
||||
assert mac_address(mac) == b"\xa1\xb2\xc3\xd4\xe5\xf6"
|
||||
|
||||
|
||||
async def test_invalid_mac_address(hass):
|
||||
"""Test we do not accept an invalid MAC address."""
|
||||
invalid = [
|
||||
None,
|
||||
123,
|
||||
["a", "b", "c"],
|
||||
{"abc": "def"},
|
||||
"a1b2c3d4e5f",
|
||||
"a1b2.c3d4.e5f",
|
||||
"a1-b2-c3-d4-e5-f",
|
||||
"a1b2c3d4e5f66",
|
||||
"a1b2.c3d4.e5f66",
|
||||
"a1-b2-c3-d4-e5-f66",
|
||||
"a1b2c3d4e5fg",
|
||||
"a1b2.c3d4.e5fg",
|
||||
"a1-b2-c3-d4-e5-fg",
|
||||
"a1b.2c3d4.e5fg",
|
||||
"a1b-2-c3-d4-e5-fg",
|
||||
]
|
||||
for mac in invalid:
|
||||
with pytest.raises((ValueError, vol.Invalid)):
|
||||
mac_address(mac)
|
Loading…
Add table
Add a link
Reference in a new issue