"""Test the Foscam component.""" from unittest.mock import patch from homeassistant.components.foscam.const import DOMAIN from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er from .conftest import setup_mock_foscam_camera from .const import ENTRY_ID, VALID_CONFIG from tests.common import MockConfigEntry async def test_unique_id_new_entry( hass: HomeAssistant, entity_registry: er.EntityRegistry, ) -> None: """Test unique ID for a newly added device is correct.""" entry = MockConfigEntry(domain=DOMAIN, data=VALID_CONFIG, entry_id=ENTRY_ID) entry.add_to_hass(hass) with ( # Mock a valid camera instance" patch("homeassistant.components.foscam.FoscamCamera") as mock_foscam_camera, ): setup_mock_foscam_camera(mock_foscam_camera) assert await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() # Test that unique_id remains the same. entity_id = entity_registry.async_get_entity_id( SWITCH_DOMAIN, DOMAIN, f"{ENTRY_ID}_sleep_switch" ) entity_new = entity_registry.async_get(entity_id) assert entity_new.unique_id == f"{ENTRY_ID}_sleep_switch" async def test_switch_unique_id_migration_ok( hass: HomeAssistant, entity_registry: er.EntityRegistry, ) -> None: """Test that the unique ID for a sleep switch is migrated to the new format.""" entry = MockConfigEntry( domain=DOMAIN, data=VALID_CONFIG, entry_id=ENTRY_ID, version=1 ) entry.add_to_hass(hass) entity_before = entity_registry.async_get_or_create( SWITCH_DOMAIN, DOMAIN, "sleep_switch", config_entry=entry ) assert entity_before.unique_id == "sleep_switch" # Update config entry with version 2 entry = MockConfigEntry( domain=DOMAIN, data=VALID_CONFIG, entry_id=ENTRY_ID, version=2 ) entry.add_to_hass(hass) with ( # Mock a valid camera instance" patch("homeassistant.components.foscam.FoscamCamera") as mock_foscam_camera, ): setup_mock_foscam_camera(mock_foscam_camera) await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() entity_id_new = entity_registry.async_get_entity_id( SWITCH_DOMAIN, DOMAIN, f"{ENTRY_ID}_sleep_switch" ) assert hass.states.get(entity_id_new) entity_after = entity_registry.async_get(entity_id_new) assert entity_after.previous_unique_id == "sleep_switch" assert entity_after.unique_id == f"{ENTRY_ID}_sleep_switch" async def test_unique_id_migration_not_needed( hass: HomeAssistant, entity_registry: er.EntityRegistry, ) -> None: """Test that the unique ID for a sleep switch is not executed if already in right format.""" entry = MockConfigEntry(domain=DOMAIN, data=VALID_CONFIG, entry_id=ENTRY_ID) entry.add_to_hass(hass) entity_registry.async_get_or_create( SWITCH_DOMAIN, DOMAIN, f"{ENTRY_ID}_sleep_switch", config_entry=entry ) entity_id = entity_registry.async_get_entity_id( SWITCH_DOMAIN, DOMAIN, f"{ENTRY_ID}_sleep_switch" ) entity_before = entity_registry.async_get(entity_id) assert entity_before.unique_id == f"{ENTRY_ID}_sleep_switch" with ( # Mock a valid camera instance" patch("homeassistant.components.foscam.FoscamCamera") as mock_foscam_camera, patch( "homeassistant.components.foscam.async_migrate_entry", return_value=True, ), ): setup_mock_foscam_camera(mock_foscam_camera) assert await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() # Test that unique_id remains the same. assert hass.states.get(entity_id) entity_after = entity_registry.async_get(entity_id) assert entity_after.unique_id == entity_before.unique_id