diff --git a/homeassistant/components/thread/dataset_store.py b/homeassistant/components/thread/dataset_store.py index 22e2c1822c1..f814fbffbd0 100644 --- a/homeassistant/components/thread/dataset_store.py +++ b/homeassistant/components/thread/dataset_store.py @@ -202,8 +202,17 @@ class DatasetStore: raise HomeAssistantError("Invalid dataset") # Bail out if the dataset already exists - if any(entry for entry in self.datasets.values() if entry.dataset == dataset): - return + entry: DatasetEntry | None + for entry in self.datasets.values(): + if entry.dataset == dataset: + if ( + preferred_border_agent_id + and entry.preferred_border_agent_id is None + ): + self.async_set_preferred_border_agent_id( + entry.id, preferred_border_agent_id + ) + return # Update if dataset with same extended pan id exists and the timestamp # is newer @@ -248,6 +257,10 @@ class DatasetStore: self.datasets[entry.id], tlv=tlv ) self.async_schedule_save() + if preferred_border_agent_id and entry.preferred_border_agent_id is None: + self.async_set_preferred_border_agent_id( + entry.id, preferred_border_agent_id + ) return entry = DatasetEntry( diff --git a/tests/components/thread/test_dataset_store.py b/tests/components/thread/test_dataset_store.py index 77102f92019..d8822a7d536 100644 --- a/tests/components/thread/test_dataset_store.py +++ b/tests/components/thread/test_dataset_store.py @@ -546,9 +546,32 @@ async def test_set_preferred_border_agent_id(hass: HomeAssistant) -> None: assert await dataset_store.async_get_preferred_dataset(hass) is None await dataset_store.async_add_dataset( - hass, "source", DATASET_1, preferred_border_agent_id="blah" + hass, "source", DATASET_3, preferred_border_agent_id="blah" ) store = await dataset_store.async_get_store(hass) assert len(store.datasets) == 1 assert list(store.datasets.values())[0].preferred_border_agent_id == "blah" + + await dataset_store.async_add_dataset( + hass, "source", DATASET_3, preferred_border_agent_id="bleh" + ) + assert list(store.datasets.values())[0].preferred_border_agent_id == "blah" + + await dataset_store.async_add_dataset(hass, "source", DATASET_2) + assert len(store.datasets) == 2 + assert list(store.datasets.values())[1].preferred_border_agent_id is None + + await dataset_store.async_add_dataset( + hass, "source", DATASET_2, preferred_border_agent_id="blah" + ) + assert list(store.datasets.values())[1].preferred_border_agent_id == "blah" + + await dataset_store.async_add_dataset(hass, "source", DATASET_1) + assert len(store.datasets) == 3 + assert list(store.datasets.values())[2].preferred_border_agent_id is None + + await dataset_store.async_add_dataset( + hass, "source", DATASET_1_LARGER_TIMESTAMP, preferred_border_agent_id="blah" + ) + assert list(store.datasets.values())[1].preferred_border_agent_id == "blah"