Fix LaMetric Config Flow for SKY (#93483)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
This commit is contained in:
parent
f9037d5f6d
commit
a260c11d4e
4 changed files with 137 additions and 4 deletions
|
@ -248,6 +248,10 @@ class LaMetricFlowHandler(AbstractOAuth2FlowHandler, domain=DOMAIN):
|
|||
updates={CONF_HOST: lametric.host, CONF_API_KEY: lametric.api_key}
|
||||
)
|
||||
|
||||
notify_sound: Sound | None = None
|
||||
if device.model != "sa5":
|
||||
notify_sound = Sound(sound=NotificationSound.WIN)
|
||||
|
||||
await lametric.notify(
|
||||
notification=Notification(
|
||||
priority=NotificationPriority.CRITICAL,
|
||||
|
@ -255,7 +259,7 @@ class LaMetricFlowHandler(AbstractOAuth2FlowHandler, domain=DOMAIN):
|
|||
model=Model(
|
||||
cycles=2,
|
||||
frames=[Simple(text="Connected to Home Assistant!", icon=7956)],
|
||||
sound=Sound(sound=NotificationSound.WIN),
|
||||
sound=notify_sound,
|
||||
),
|
||||
)
|
||||
)
|
||||
|
|
|
@ -67,8 +67,14 @@ def mock_lametric_cloud() -> Generator[MagicMock, None, None]:
|
|||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_lametric() -> Generator[MagicMock, None, None]:
|
||||
"""Return a mocked LaMetric client."""
|
||||
def device_fixture() -> str:
|
||||
"""Return the device fixture for a specific device."""
|
||||
return "device"
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_lametric(request, device_fixture: str) -> Generator[MagicMock, None, None]:
|
||||
"""Return a mocked LaMetric TIME client."""
|
||||
with patch(
|
||||
"homeassistant.components.lametric.coordinator.LaMetricDevice", autospec=True
|
||||
) as lametric_mock, patch(
|
||||
|
@ -79,7 +85,7 @@ def mock_lametric() -> Generator[MagicMock, None, None]:
|
|||
lametric.api_key = "mock-api-key"
|
||||
lametric.host = "127.0.0.1"
|
||||
lametric.device.return_value = Device.parse_raw(
|
||||
load_fixture("device.json", DOMAIN)
|
||||
load_fixture(f"{device_fixture}.json", DOMAIN)
|
||||
)
|
||||
yield lametric
|
||||
|
||||
|
|
71
tests/components/lametric/fixtures/device_sa5.json
Normal file
71
tests/components/lametric/fixtures/device_sa5.json
Normal file
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"audio": {
|
||||
"volume": 100,
|
||||
"volume_limit": {
|
||||
"max": 100,
|
||||
"min": 0
|
||||
},
|
||||
"volume_range": {
|
||||
"max": 100,
|
||||
"min": 0
|
||||
}
|
||||
},
|
||||
"bluetooth": {
|
||||
"active": true,
|
||||
"address": "AA:BB:CC:DD:EE:FF",
|
||||
"available": true,
|
||||
"discoverable": true,
|
||||
"low_energy": {
|
||||
"active": true,
|
||||
"advertising": true,
|
||||
"connectable": true
|
||||
},
|
||||
"name": "SKY0123",
|
||||
"pairable": false
|
||||
},
|
||||
"display": {
|
||||
"brightness": 66,
|
||||
"brightness_limit": {
|
||||
"max": 100,
|
||||
"min": 2
|
||||
},
|
||||
"brightness_mode": "manual",
|
||||
"brightness_range": {
|
||||
"max": 100,
|
||||
"min": 0
|
||||
},
|
||||
"height": 8,
|
||||
"on": true,
|
||||
"screensaver": {
|
||||
"enabled": true,
|
||||
"modes": {
|
||||
"screen_off": {
|
||||
"enabled": false
|
||||
},
|
||||
"time_based": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"widget": ""
|
||||
},
|
||||
"type": "mixed",
|
||||
"width": 64
|
||||
},
|
||||
"id": "12345",
|
||||
"mode": "manual",
|
||||
"model": "sa5",
|
||||
"name": "spyfly's LaMetric SKY",
|
||||
"os_version": "3.0.13",
|
||||
"serial_number": "SA52100000123TBNC",
|
||||
"wifi": {
|
||||
"active": true,
|
||||
"mac": "AA:BB:CC:DD:EE:FF",
|
||||
"available": true,
|
||||
"encryption": "WPA",
|
||||
"ssid": "IoT",
|
||||
"ip": "127.0.0.1",
|
||||
"mode": "dhcp",
|
||||
"netmask": "255.255.255.0",
|
||||
"strength": 58
|
||||
}
|
||||
}
|
|
@ -6,6 +6,9 @@ from demetriek import (
|
|||
LaMetricConnectionError,
|
||||
LaMetricConnectionTimeoutError,
|
||||
LaMetricError,
|
||||
Notification,
|
||||
NotificationSound,
|
||||
Sound,
|
||||
)
|
||||
import pytest
|
||||
|
||||
|
@ -238,6 +241,10 @@ async def test_full_manual(
|
|||
|
||||
assert len(mock_lametric.device.mock_calls) == 1
|
||||
assert len(mock_lametric.notify.mock_calls) == 1
|
||||
|
||||
notification: Notification = mock_lametric.notify.mock_calls[0][2]["notification"]
|
||||
assert notification.model.sound == Sound(sound=NotificationSound.WIN)
|
||||
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
|
@ -894,3 +901,48 @@ async def test_reauth_manual(
|
|||
|
||||
assert len(mock_lametric.device.mock_calls) == 1
|
||||
assert len(mock_lametric.notify.mock_calls) == 1
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("mock_setup_entry")
|
||||
@pytest.mark.parametrize("device_fixture", ["device_sa5"])
|
||||
async def test_reauth_manual_sky(
|
||||
hass: HomeAssistant,
|
||||
mock_lametric: MagicMock,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
) -> None:
|
||||
"""Test reauth flow with manual entry for LaMetric Sky."""
|
||||
mock_config_entry.add_to_hass(hass)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={
|
||||
"source": SOURCE_REAUTH,
|
||||
"unique_id": mock_config_entry.unique_id,
|
||||
"entry_id": mock_config_entry.entry_id,
|
||||
},
|
||||
data=mock_config_entry.data,
|
||||
)
|
||||
|
||||
flow_id = result["flow_id"]
|
||||
|
||||
await hass.config_entries.flow.async_configure(
|
||||
flow_id, user_input={"next_step_id": "manual_entry"}
|
||||
)
|
||||
|
||||
result2 = await hass.config_entries.flow.async_configure(
|
||||
flow_id, user_input={CONF_API_KEY: "mock-api-key"}
|
||||
)
|
||||
|
||||
assert result2.get("type") == FlowResultType.ABORT
|
||||
assert result2.get("reason") == "reauth_successful"
|
||||
assert mock_config_entry.data == {
|
||||
CONF_HOST: "127.0.0.1",
|
||||
CONF_API_KEY: "mock-api-key",
|
||||
CONF_MAC: "AA:BB:CC:DD:EE:FF",
|
||||
}
|
||||
|
||||
assert len(mock_lametric.device.mock_calls) == 1
|
||||
assert len(mock_lametric.notify.mock_calls) == 1
|
||||
|
||||
notification: Notification = mock_lametric.notify.mock_calls[0][2]["notification"]
|
||||
assert notification.model.sound is None
|
||||
|
|
Loading…
Add table
Reference in a new issue