mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 06:07:17 +00:00
Fix serialization of Xiaomi BLE reauth flow (#76095)
* Use data instead of context to fix serialisation bug * Test change to async_start_reauth
This commit is contained in:
parent
a628be4db8
commit
a0adfb9e62
@ -260,7 +260,7 @@ class XiaomiConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
entry = self.hass.config_entries.async_get_entry(self.context["entry_id"])
|
entry = self.hass.config_entries.async_get_entry(self.context["entry_id"])
|
||||||
assert entry is not None
|
assert entry is not None
|
||||||
|
|
||||||
device: DeviceData = self.context["device"]
|
device: DeviceData = entry_data["device"]
|
||||||
self._discovered_device = device
|
self._discovered_device = device
|
||||||
|
|
||||||
self._discovery_info = device.last_service_info
|
self._discovery_info = device.last_service_info
|
||||||
|
@ -181,7 +181,7 @@ def process_service_info(
|
|||||||
and data.encryption_scheme != EncryptionScheme.NONE
|
and data.encryption_scheme != EncryptionScheme.NONE
|
||||||
and not data.bindkey_verified
|
and not data.bindkey_verified
|
||||||
):
|
):
|
||||||
entry.async_start_reauth(hass, context={"device": data})
|
entry.async_start_reauth(hass, data={"device": data})
|
||||||
|
|
||||||
return sensor_update_to_bluetooth_data_update(update)
|
return sensor_update_to_bluetooth_data_update(update)
|
||||||
|
|
||||||
|
@ -641,7 +641,10 @@ class ConfigEntry:
|
|||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_start_reauth(
|
def async_start_reauth(
|
||||||
self, hass: HomeAssistant, context: dict[str, Any] | None = None
|
self,
|
||||||
|
hass: HomeAssistant,
|
||||||
|
context: dict[str, Any] | None = None,
|
||||||
|
data: dict[str, Any] | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Start a reauth flow."""
|
"""Start a reauth flow."""
|
||||||
flow_context = {
|
flow_context = {
|
||||||
@ -662,7 +665,7 @@ class ConfigEntry:
|
|||||||
hass.config_entries.flow.async_init(
|
hass.config_entries.flow.async_init(
|
||||||
self.domain,
|
self.domain,
|
||||||
context=flow_context,
|
context=flow_context,
|
||||||
data=self.data,
|
data=self.data | (data or {}),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1033,9 +1033,8 @@ async def test_async_step_reauth_abort_early(hass):
|
|||||||
"entry_id": entry.entry_id,
|
"entry_id": entry.entry_id,
|
||||||
"title_placeholders": {"name": entry.title},
|
"title_placeholders": {"name": entry.title},
|
||||||
"unique_id": entry.unique_id,
|
"unique_id": entry.unique_id,
|
||||||
"device": device,
|
|
||||||
},
|
},
|
||||||
data=entry.data,
|
data=entry.data | {"device": device},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert result["type"] == FlowResultType.ABORT
|
assert result["type"] == FlowResultType.ABORT
|
||||||
|
@ -3286,8 +3286,14 @@ async def test_reauth(hass):
|
|||||||
await entry.async_setup(hass)
|
await entry.async_setup(hass)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
entry.async_start_reauth(hass, {"extra_context": "some_extra_context"})
|
flow = hass.config_entries.flow
|
||||||
await hass.async_block_till_done()
|
with patch.object(flow, "async_init", wraps=flow.async_init) as mock_init:
|
||||||
|
entry.async_start_reauth(
|
||||||
|
hass,
|
||||||
|
context={"extra_context": "some_extra_context"},
|
||||||
|
data={"extra_data": 1234},
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
flows = hass.config_entries.flow.async_progress()
|
flows = hass.config_entries.flow.async_progress()
|
||||||
assert len(flows) == 1
|
assert len(flows) == 1
|
||||||
@ -3296,6 +3302,8 @@ async def test_reauth(hass):
|
|||||||
assert flows[0]["context"]["title_placeholders"] == {"name": "test_title"}
|
assert flows[0]["context"]["title_placeholders"] == {"name": "test_title"}
|
||||||
assert flows[0]["context"]["extra_context"] == "some_extra_context"
|
assert flows[0]["context"]["extra_context"] == "some_extra_context"
|
||||||
|
|
||||||
|
assert mock_init.call_args.kwargs["data"]["extra_data"] == 1234
|
||||||
|
|
||||||
# Check we can't start duplicate flows
|
# Check we can't start duplicate flows
|
||||||
entry.async_start_reauth(hass, {"extra_context": "some_extra_context"})
|
entry.async_start_reauth(hass, {"extra_context": "some_extra_context"})
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user