44
55from unittest .mock import ANY , MagicMock
66
7+ import pytest
8+
79from homeassistant .components .airos .const import (
810 DEFAULT_SSL ,
911 DEFAULT_VERIFY_SSL ,
1012 DOMAIN ,
1113 SECTION_ADVANCED_SETTINGS ,
1214)
15+ from homeassistant .components .binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN
16+ from homeassistant .components .sensor import DOMAIN as SENSOR_DOMAIN
1317from homeassistant .config_entries import SOURCE_USER , ConfigEntryState
1418from homeassistant .const import (
1519 CONF_HOST ,
1923 CONF_VERIFY_SSL ,
2024)
2125from homeassistant .core import HomeAssistant
26+ from homeassistant .helpers import device_registry as dr , entity_registry as er
2227
2328from tests .common import MockConfigEntry
2429
@@ -108,8 +113,10 @@ async def test_setup_entry_without_ssl(
108113 assert entry .data [SECTION_ADVANCED_SETTINGS ][CONF_VERIFY_SSL ] is False
109114
110115
111- async def test_migrate_entry (hass : HomeAssistant , mock_airos_client : MagicMock ) -> None :
112- """Test migrate entry unique id."""
116+ async def test_ssl_migrate_entry (
117+ hass : HomeAssistant , mock_airos_client : MagicMock
118+ ) -> None :
119+ """Test migrate entry SSL options."""
113120 entry = MockConfigEntry (
114121 domain = DOMAIN ,
115122 source = SOURCE_USER ,
@@ -124,11 +131,77 @@ async def test_migrate_entry(hass: HomeAssistant, mock_airos_client: MagicMock)
124131 await hass .async_block_till_done ()
125132
126133 assert entry .state is ConfigEntryState .LOADED
127- assert entry .version == 1
128- assert entry .minor_version == 2
134+ assert entry .version == 2
135+ assert entry .minor_version == 1
129136 assert entry .data == MOCK_CONFIG_V1_2
130137
131138
139+ @pytest .mark .parametrize (
140+ ("sensor_domain" , "sensor_name" , "mock_id" ),
141+ [
142+ (BINARY_SENSOR_DOMAIN , "port_forwarding" , "device_id_12345" ),
143+ (SENSOR_DOMAIN , "antenna_gain" , "01:23:45:67:89:ab" ),
144+ ],
145+ )
146+ async def test_uid_migrate_entry (
147+ hass : HomeAssistant ,
148+ mock_airos_client : MagicMock ,
149+ device_registry : dr .DeviceRegistry ,
150+ sensor_domain : str ,
151+ sensor_name : str ,
152+ mock_id : str ,
153+ ) -> None :
154+ """Test migrate entry unique id."""
155+ entity_registry = er .async_get (hass )
156+
157+ MOCK_MAC = dr .format_mac ("01:23:45:67:89:AB" )
158+ MOCK_ID = "device_id_12345"
159+ old_unique_id = f"{ mock_id } _{ sensor_name } "
160+ new_unique_id = f"{ MOCK_MAC } _{ sensor_name } "
161+
162+ entry = MockConfigEntry (
163+ domain = DOMAIN ,
164+ source = SOURCE_USER ,
165+ data = MOCK_CONFIG_V1_2 ,
166+ entry_id = "1" ,
167+ unique_id = mock_id ,
168+ version = 1 ,
169+ minor_version = 2 ,
170+ )
171+ entry .add_to_hass (hass )
172+
173+ device_registry .async_get_or_create (
174+ config_entry_id = entry .entry_id ,
175+ identifiers = {(DOMAIN , MOCK_ID )},
176+ connections = {
177+ (dr .CONNECTION_NETWORK_MAC , MOCK_MAC ),
178+ },
179+ )
180+ await hass .async_block_till_done ()
181+
182+ old_entity_entry = entity_registry .async_get_or_create (
183+ DOMAIN , sensor_domain , old_unique_id , config_entry = entry
184+ )
185+ original_entity_id = old_entity_entry .entity_id
186+
187+ hass .config_entries .async_update_entry (entry , unique_id = MOCK_MAC )
188+ await hass .async_block_till_done ()
189+
190+ await hass .config_entries .async_setup (entry .entry_id )
191+ await hass .async_block_till_done ()
192+
193+ updated_entity_entry = entity_registry .async_get (original_entity_id )
194+
195+ assert entry .state is ConfigEntryState .LOADED
196+ assert entry .version == 2
197+ assert entry .minor_version == 1
198+ assert (
199+ entity_registry .async_get_entity_id (sensor_domain , DOMAIN , old_unique_id )
200+ is None
201+ )
202+ assert updated_entity_entry .unique_id == new_unique_id
203+
204+
132205async def test_migrate_future_return (
133206 hass : HomeAssistant ,
134207 mock_airos_client : MagicMock ,
@@ -140,7 +213,7 @@ async def test_migrate_future_return(
140213 data = MOCK_CONFIG_V1_2 ,
141214 entry_id = "1" ,
142215 unique_id = "airos_device" ,
143- version = 2 ,
216+ version = 3 ,
144217 )
145218 entry .add_to_hass (hass )
146219
0 commit comments