@@ -373,10 +373,35 @@ async def test_migrate_entry_discovers_circuits(
373373
374374 assert entry .state is ConfigEntryState .LOADED
375375 assert entry .version == 1
376- assert entry .minor_version == 2
376+ assert entry .minor_version == 3
377377 assert entry .data [CONF_HEATING_CIRCUITS ] == [1 , 2 ]
378378
379379
380+ async def test_migrate_entry_empty_discovery_falls_back (
381+ hass : HomeAssistant ,
382+ mock_bsblan : MagicMock ,
383+ ) -> None :
384+ """Test migration falls back to [1] when discovery returns no circuits."""
385+ mock_bsblan .get_available_circuits .return_value = []
386+
387+ entry = MockConfigEntry (
388+ title = "BSBLAN Setup" ,
389+ domain = DOMAIN ,
390+ data = _legacy_entry_data (),
391+ unique_id = "00:80:41:19:69:90" ,
392+ version = 1 ,
393+ minor_version = 1 ,
394+ )
395+ entry .add_to_hass (hass )
396+ await hass .config_entries .async_setup (entry .entry_id )
397+ await hass .async_block_till_done ()
398+
399+ assert entry .state is ConfigEntryState .LOADED
400+ assert entry .version == 1
401+ assert entry .minor_version == 3
402+ assert entry .data [CONF_HEATING_CIRCUITS ] == [1 ]
403+
404+
380405async def test_migrate_entry_discovery_failure_falls_back (
381406 hass : HomeAssistant ,
382407 mock_bsblan : MagicMock ,
@@ -398,7 +423,7 @@ async def test_migrate_entry_discovery_failure_falls_back(
398423
399424 assert entry .state is ConfigEntryState .LOADED
400425 assert entry .version == 1
401- assert entry .minor_version == 2
426+ assert entry .minor_version == 3
402427 assert entry .data [CONF_HEATING_CIRCUITS ] == [1 ]
403428
404429
@@ -422,8 +447,33 @@ async def test_migrate_entry_discovery_timeout_falls_back(
422447 await hass .async_block_till_done ()
423448
424449 assert entry .state is ConfigEntryState .LOADED
425- assert entry .minor_version == 2
450+ assert entry .minor_version == 3
451+ assert entry .data [CONF_HEATING_CIRCUITS ] == [1 ]
452+
453+
454+ async def test_migrate_entry_stored_empty_circuits_falls_back (
455+ hass : HomeAssistant ,
456+ mock_bsblan : MagicMock ,
457+ ) -> None :
458+ """Test migration repairs stored empty heating circuits."""
459+ entry = MockConfigEntry (
460+ title = "BSBLAN Setup" ,
461+ domain = DOMAIN ,
462+ data = {** _legacy_entry_data (), CONF_HEATING_CIRCUITS : []},
463+ unique_id = "00:80:41:19:69:90" ,
464+ version = 1 ,
465+ minor_version = 2 ,
466+ )
467+ entry .add_to_hass (hass )
468+ await hass .config_entries .async_setup (entry .entry_id )
469+ await hass .async_block_till_done ()
470+
471+ assert entry .state is ConfigEntryState .LOADED
472+ assert entry .version == 1
473+ assert entry .minor_version == 3
426474 assert entry .data [CONF_HEATING_CIRCUITS ] == [1 ]
475+ assert entry .runtime_data .available_circuits == [1 ]
476+ assert mock_bsblan .get_available_circuits .call_count == 0
427477
428478
429479async def test_migrate_entry_future_version_aborts (
0 commit comments