diff --git a/tests/components/smartthings/conftest.py b/tests/components/smartthings/conftest.py index 7b3a9e19b4e..31cbe6dd1d4 100644 --- a/tests/components/smartthings/conftest.py +++ b/tests/components/smartthings/conftest.py @@ -21,6 +21,8 @@ from homeassistant.config_entries import ( from homeassistant.const import CONF_ACCESS_TOKEN, CONF_WEBHOOK_ID from homeassistant.setup import async_setup_component +from tests.common import MockConfigEntry + COMPONENT_PREFIX = "homeassistant.components.smartthings." @@ -190,8 +192,9 @@ def config_entry_fixture(hass, installed_app, location): CONF_OAUTH_CLIENT_ID: str(uuid4()), CONF_OAUTH_CLIENT_SECRET: str(uuid4()) } - return ConfigEntry(2, DOMAIN, location.name, data, SOURCE_USER, - CONN_CLASS_CLOUD_PUSH) + return MockConfigEntry(domain=DOMAIN, data=data, title=location.name, + version=2, source=SOURCE_USER, + connection_class=CONN_CLASS_CLOUD_PUSH) @pytest.fixture(name="subscription_factory") diff --git a/tests/components/smartthings/test_config_flow.py b/tests/components/smartthings/test_config_flow.py index 54f6400d763..cceca4251a9 100644 --- a/tests/components/smartthings/test_config_flow.py +++ b/tests/components/smartthings/test_config_flow.py @@ -13,7 +13,8 @@ from homeassistant.components.smartthings.config_flow import ( from homeassistant.components.smartthings.const import ( CONF_INSTALLED_APP_ID, CONF_INSTALLED_APPS, CONF_LOCATION_ID, CONF_REFRESH_TOKEN, DOMAIN) -from homeassistant.config_entries import ConfigEntry + +from tests.common import MockConfigEntry async def test_step_user(hass): @@ -64,13 +65,10 @@ async def test_token_already_setup(hass): flow = SmartThingsFlowHandler() flow.hass = hass token = str(uuid4()) - entries = [ConfigEntry( - version='', domain='', title='', data={'access_token': token}, - source='', connection_class='')] + entry = MockConfigEntry(domain=DOMAIN, data={'access_token': token}) + entry.add_to_hass(hass) - with patch.object(hass.config_entries, 'async_entries', - return_value=entries): - result = await flow.async_step_user({'access_token': token}) + result = await flow.async_step_user({'access_token': token}) assert result['type'] == data_entry_flow.RESULT_TYPE_FORM assert result['step_id'] == 'user' diff --git a/tests/components/smartthings/test_init.py b/tests/components/smartthings/test_init.py index 150c8f7327e..7e76003f415 100644 --- a/tests/components/smartthings/test_init.py +++ b/tests/components/smartthings/test_init.py @@ -21,7 +21,7 @@ async def test_migration_creates_new_flow( hass, smartthings_mock, config_entry): """Test migration deletes app and creates new flow.""" config_entry.version = 1 - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) await smartthings.async_migrate_entry(hass, config_entry) await hass.async_block_till_done() @@ -44,7 +44,7 @@ async def test_unrecoverable_api_errors_create_new_flow( 403 (forbidden/not found): Occurs when the app or installed app could not be retrieved/found (likely deleted?) """ - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) smartthings_mock.app.side_effect = \ ClientResponseError(None, None, status=401) @@ -65,7 +65,7 @@ async def test_unrecoverable_api_errors_create_new_flow( async def test_recoverable_api_errors_raise_not_ready( hass, config_entry, smartthings_mock): """Test config entry not ready raised for recoverable API errors.""" - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) smartthings_mock.app.side_effect = \ ClientResponseError(None, None, status=500) @@ -76,7 +76,7 @@ async def test_recoverable_api_errors_raise_not_ready( async def test_scenes_api_errors_raise_not_ready( hass, config_entry, app, installed_app, smartthings_mock): """Test if scenes are unauthorized we continue to load platforms.""" - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) smartthings_mock.app.return_value = app smartthings_mock.installed_app.return_value = installed_app smartthings_mock.scenes.side_effect = \ @@ -88,7 +88,7 @@ async def test_scenes_api_errors_raise_not_ready( async def test_connection_errors_raise_not_ready( hass, config_entry, smartthings_mock): """Test config entry not ready raised for connection errors.""" - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) smartthings_mock.app.side_effect = ClientConnectionError() with pytest.raises(ConfigEntryNotReady): @@ -99,7 +99,7 @@ async def test_base_url_no_longer_https_does_not_load( hass, config_entry, app, smartthings_mock): """Test base_url no longer valid creates a new flow.""" hass.config.api.base_url = 'http://0.0.0.0' - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) smartthings_mock.app.return_value = app # Assert setup returns false @@ -111,7 +111,7 @@ async def test_unauthorized_installed_app_raises_not_ready( hass, config_entry, app, installed_app, smartthings_mock): """Test config entry not ready raised when the app isn't authorized.""" - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) installed_app.installed_app_status = InstalledAppStatus.PENDING smartthings_mock.app.return_value = app @@ -125,7 +125,7 @@ async def test_scenes_unauthorized_loads_platforms( hass, config_entry, app, installed_app, device, smartthings_mock, subscription_factory): """Test if scenes are unauthorized we continue to load platforms.""" - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) smartthings_mock.app.return_value = app smartthings_mock.installed_app.return_value = installed_app smartthings_mock.devices.return_value = [device] @@ -151,7 +151,7 @@ async def test_config_entry_loads_platforms( hass, config_entry, app, installed_app, device, smartthings_mock, subscription_factory, scene): """Test config entry loads properly and proxies to platforms.""" - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) smartthings_mock.app.return_value = app smartthings_mock.installed_app.return_value = installed_app smartthings_mock.devices.return_value = [device] @@ -176,7 +176,7 @@ async def test_config_entry_loads_unconnected_cloud( hass, config_entry, app, installed_app, device, smartthings_mock, subscription_factory, scene): """Test entry loads during startup when cloud isn't connected.""" - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) hass.data[DOMAIN][CONF_CLOUDHOOK_URL] = "https://test.cloud" hass.config.api.base_url = 'http://0.0.0.0' smartthings_mock.app.return_value = app @@ -230,7 +230,7 @@ async def test_remove_entry(hass, config_entry, smartthings_mock): async def test_remove_entry_cloudhook(hass, config_entry, smartthings_mock): """Test that the installed app, app, and cloudhook are removed up.""" # Arrange - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) hass.data[DOMAIN][CONF_CLOUDHOOK_URL] = "https://test.cloud" # Act with patch.object(cloud, 'async_is_logged_in', @@ -248,10 +248,11 @@ async def test_remove_entry_cloudhook(hass, config_entry, smartthings_mock): async def test_remove_entry_app_in_use(hass, config_entry, smartthings_mock): """Test app is not removed if in use by another config entry.""" # Arrange + config_entry.add_to_hass(hass) data = config_entry.data.copy() data[CONF_INSTALLED_APP_ID] = str(uuid4()) entry2 = MockConfigEntry(version=2, domain=DOMAIN, data=data) - setattr(hass.config_entries, '_entries', [config_entry, entry2]) + entry2.add_to_hass(hass) # Act await smartthings.async_remove_entry(hass, config_entry) # Assert diff --git a/tests/components/smartthings/test_smartapp.py b/tests/components/smartthings/test_smartapp.py index 0d9bb568475..d76b7ffc398 100644 --- a/tests/components/smartthings/test_smartapp.py +++ b/tests/components/smartthings/test_smartapp.py @@ -9,6 +9,8 @@ from homeassistant.components.smartthings.const import ( CONF_INSTALLED_APP_ID, CONF_INSTALLED_APPS, CONF_LOCATION_ID, CONF_REFRESH_TOKEN, DATA_MANAGER, DOMAIN) +from tests.common import MockConfigEntry + async def test_update_app(hass, app): """Test update_app does not save if app is current.""" @@ -59,7 +61,7 @@ async def test_smartapp_install_creates_flow( hass, smartthings_mock, config_entry, location, device_factory): """Test installation creates flow.""" # Arrange - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) app = Mock() app.app_id = config_entry.data['app_id'] request = Mock() @@ -95,14 +97,11 @@ async def test_smartapp_update_saves_token( hass, smartthings_mock, location, device_factory): """Test update saves token.""" # Arrange - entry = Mock() - entry.data = { + entry = MockConfigEntry(domain=DOMAIN, data={ 'installed_app_id': str(uuid4()), 'app_id': str(uuid4()) - } - entry.domain = DOMAIN - - setattr(hass.config_entries, '_entries', [entry]) + }) + entry.add_to_hass(hass) app = Mock() app.app_id = entry.data['app_id'] request = Mock() @@ -119,7 +118,7 @@ async def test_smartapp_update_saves_token( async def test_smartapp_uninstall(hass, config_entry): """Test the config entry is unloaded when the app is uninstalled.""" - setattr(hass.config_entries, '_entries', [config_entry]) + config_entry.add_to_hass(hass) app = Mock() app.app_id = config_entry.data['app_id'] request = Mock()