@@ -64,7 +64,12 @@ async def test_device_tracker_properties(hass, mock_device):
6464 tracker = PetTracerDeviceTracker (coordinator , mock_device )
6565
6666 assert tracker .unique_id == "pettracer_12345"
67- assert tracker .name == "Fluffy"
67+ # name is None so has_entity_name composes the friendly name from the
68+ # device name alone (the pet's name), rather than baking it into the entity.
69+ assert tracker .name is None
70+ assert tracker ._attr_has_entity_name is True
71+ assert tracker .device_info ["name" ] == "Fluffy"
72+ assert tracker ._attr_suggested_object_id == "pettracer_12345"
6873 assert tracker .source_type == SourceType .GPS
6974 assert tracker .latitude == 51.5074
7075 assert tracker .longitude == - 0.1278
@@ -114,7 +119,8 @@ async def test_device_tracker_no_position(hass, mock_device_no_position):
114119 tracker = PetTracerDeviceTracker (coordinator , mock_device_no_position )
115120
116121 assert tracker .unique_id == "pettracer_12346"
117- assert tracker .name == "Rex"
122+ assert tracker .name is None
123+ assert tracker .device_info ["name" ] == "Rex"
118124 assert tracker .latitude is None
119125 assert tracker .longitude is None
120126 assert tracker .location_accuracy == 0
@@ -192,8 +198,8 @@ async def test_device_tracker_multiple_devices(hass, mock_device, mock_device_no
192198
193199 assert tracker1 .unique_id == "pettracer_12345"
194200 assert tracker2 .unique_id == "pettracer_12346"
195- assert tracker1 .name == "Fluffy"
196- assert tracker2 .name == "Rex"
201+ assert tracker1 .device_info [ " name" ] == "Fluffy"
202+ assert tracker2 .device_info [ " name" ] == "Rex"
197203 assert tracker1 .latitude == 51.5074
198204 assert tracker2 .latitude is None
199205
@@ -221,6 +227,26 @@ async def test_device_tracker_coordinator_update(hass, mock_device):
221227 assert tracker .longitude == - 0.1300
222228
223229
230+ async def test_device_tracker_device_info_reflects_pet_rename (hass , mock_device ):
231+ """Renaming the pet must update device_info without changing identifiers."""
232+ from custom_components .pettracer .device_tracker import PetTracerDeviceTracker
233+
234+ coordinator = MagicMock ()
235+ coordinator .data = {"devices" : [mock_device ]}
236+
237+ tracker = PetTracerDeviceTracker (coordinator , mock_device )
238+ assert tracker .device_info ["name" ] == "Fluffy"
239+
240+ mock_device .details .name = "Buddy"
241+ coordinator .data = {"devices" : [mock_device ]}
242+
243+ assert tracker .device_info ["name" ] == "Buddy"
244+ # Stable identifiers never move, regardless of the pet's current name.
245+ assert tracker .unique_id == "pettracer_12345"
246+ assert tracker ._attr_suggested_object_id == "pettracer_12345"
247+ assert tracker .device_info ["identifiers" ] == {(DOMAIN , 12345 )}
248+
249+
224250async def test_device_tracker_no_details (hass ):
225251 """Test device tracker when device has no details."""
226252 from custom_components .pettracer .device_tracker import PetTracerDeviceTracker
@@ -238,7 +264,9 @@ async def test_device_tracker_no_details(hass):
238264 tracker = PetTracerDeviceTracker (coordinator , device )
239265
240266 assert tracker .unique_id == "pettracer_99999"
241- assert tracker .name == "PetTracer 99999"
267+ assert tracker .name is None
268+ assert tracker .device_info ["name" ] == "PetTracer 99999"
269+ assert tracker ._attr_suggested_object_id == "pettracer_99999"
242270 assert tracker .latitude is None
243271 assert tracker .longitude is None
244272 assert tracker .battery_level is None
0 commit comments