|
15 | 15 | from homeassistant.helpers import device_registry as dr, entity_registry as er |
16 | 16 | from homeassistant.util.dt import utcnow |
17 | 17 |
|
18 | | -from . import FritzDeviceCoverMock, FritzDeviceSwitchMock, FritzEntityBaseMock |
| 18 | +from . import ( |
| 19 | + FritzDeviceCoverMock, |
| 20 | + FritzDeviceSensorMock, |
| 21 | + FritzDeviceSwitchMock, |
| 22 | + FritzEntityBaseMock, |
| 23 | +) |
19 | 24 | from .const import MOCK_CONFIG |
20 | 25 |
|
21 | 26 | from tests.common import MockConfigEntry, async_fire_time_changed |
@@ -140,3 +145,42 @@ async def test_coordinator_automatic_registry_cleanup( |
140 | 145 |
|
141 | 146 | assert len(er.async_entries_for_config_entry(entity_registry, entry.entry_id)) == 12 |
142 | 147 | assert len(dr.async_entries_for_config_entry(device_registry, entry.entry_id)) == 1 |
| 148 | + |
| 149 | + |
| 150 | +async def test_coordinator_workaround_sub_units_without_main_device( |
| 151 | + hass: HomeAssistant, |
| 152 | + fritz: Mock, |
| 153 | + device_registry: dr.DeviceRegistry, |
| 154 | +) -> None: |
| 155 | + """Test the workaround for sub units without main device.""" |
| 156 | + fritz().get_devices.return_value = [ |
| 157 | + FritzDeviceSensorMock( |
| 158 | + ain="bad_device-1", |
| 159 | + device_and_unit_id=("bad_device", "1"), |
| 160 | + name="bad_sensor_sub", |
| 161 | + ), |
| 162 | + FritzDeviceSensorMock( |
| 163 | + ain="good_device", |
| 164 | + device_and_unit_id=("good_device", None), |
| 165 | + name="good_sensor", |
| 166 | + ), |
| 167 | + FritzDeviceSensorMock( |
| 168 | + ain="good_device-1", |
| 169 | + device_and_unit_id=("good_device", "1"), |
| 170 | + name="good_sensor_sub", |
| 171 | + ), |
| 172 | + ] |
| 173 | + |
| 174 | + entry = MockConfigEntry( |
| 175 | + domain=DOMAIN, |
| 176 | + data=MOCK_CONFIG[DOMAIN][CONF_DEVICES][0], |
| 177 | + unique_id="any", |
| 178 | + ) |
| 179 | + entry.add_to_hass(hass) |
| 180 | + await hass.config_entries.async_setup(entry.entry_id) |
| 181 | + await hass.async_block_till_done(wait_background_tasks=True) |
| 182 | + |
| 183 | + device_entries = dr.async_entries_for_config_entry(device_registry, entry.entry_id) |
| 184 | + assert len(device_entries) == 2 |
| 185 | + assert device_entries[0].identifiers == {(DOMAIN, "good_device")} |
| 186 | + assert device_entries[1].identifiers == {(DOMAIN, "bad_device")} |
0 commit comments