"""Test HomematicIP Cloud setup process.""" from unittest.mock import patch from homeassistant.setup import async_setup_component from homeassistant.components import homematicip_cloud as hmipc from tests.common import mock_coro, MockConfigEntry async def test_config_with_accesspoint_passed_to_config_entry(hass): """Test that config for a accesspoint are loaded via config entry.""" with patch.object(hass, 'config_entries') as mock_config_entries, \ patch.object(hmipc, 'configured_haps', return_value=[]): assert await async_setup_component(hass, hmipc.DOMAIN, { hmipc.DOMAIN: { hmipc.CONF_ACCESSPOINT: 'ABC123', hmipc.CONF_AUTHTOKEN: '123', hmipc.CONF_NAME: 'name', } }) is True # Flow started for the access point assert len(mock_config_entries.flow.mock_calls) == 2 async def test_config_already_registered_not_passed_to_config_entry(hass): """Test that an already registered accesspoint does not get imported.""" with patch.object(hass, 'config_entries') as mock_config_entries, \ patch.object(hmipc, 'configured_haps', return_value=['ABC123']): assert await async_setup_component(hass, hmipc.DOMAIN, { hmipc.DOMAIN: { hmipc.CONF_ACCESSPOINT: 'ABC123', hmipc.CONF_AUTHTOKEN: '123', hmipc.CONF_NAME: 'name', } }) is True # No flow started assert len(mock_config_entries.flow.mock_calls) == 0 async def test_setup_entry_successful(hass): """Test setup entry is successful.""" entry = MockConfigEntry(domain=hmipc.DOMAIN, data={ hmipc.HMIPC_HAPID: 'ABC123', hmipc.HMIPC_AUTHTOKEN: '123', hmipc.HMIPC_NAME: 'hmip', }) entry.add_to_hass(hass) with patch.object(hmipc, 'HomematicipHAP') as mock_hap: mock_hap.return_value.async_setup.return_value = mock_coro(True) assert await async_setup_component(hass, hmipc.DOMAIN, { hmipc.DOMAIN: { hmipc.CONF_ACCESSPOINT: 'ABC123', hmipc.CONF_AUTHTOKEN: '123', hmipc.CONF_NAME: 'hmip', } }) is True assert len(mock_hap.mock_calls) == 2 async def test_setup_defined_accesspoint(hass): """Test we initiate config entry for the accesspoint.""" with patch.object(hass, 'config_entries') as mock_config_entries, \ patch.object(hmipc, 'configured_haps', return_value=[]): mock_config_entries.flow.async_init.return_value = mock_coro() assert await async_setup_component(hass, hmipc.DOMAIN, { hmipc.DOMAIN: { hmipc.CONF_ACCESSPOINT: 'ABC123', hmipc.CONF_AUTHTOKEN: '123', hmipc.CONF_NAME: 'hmip', } }) is True assert len(mock_config_entries.flow.mock_calls) == 1 assert mock_config_entries.flow.mock_calls[0][2]['data'] == { hmipc.HMIPC_HAPID: 'ABC123', hmipc.HMIPC_AUTHTOKEN: '123', hmipc.HMIPC_NAME: 'hmip', } async def test_unload_entry(hass): """Test being able to unload an entry.""" entry = MockConfigEntry(domain=hmipc.DOMAIN, data={ hmipc.HMIPC_HAPID: 'ABC123', hmipc.HMIPC_AUTHTOKEN: '123', hmipc.HMIPC_NAME: 'hmip', }) entry.add_to_hass(hass) with patch.object(hmipc, 'HomematicipHAP') as mock_hap: mock_hap.return_value.async_setup.return_value = mock_coro(True) assert await async_setup_component(hass, hmipc.DOMAIN, {}) is True assert len(mock_hap.return_value.mock_calls) == 1 mock_hap.return_value.async_reset.return_value = mock_coro(True) assert await hmipc.async_unload_entry(hass, entry) assert len(mock_hap.return_value.async_reset.mock_calls) == 1 assert hass.data[hmipc.DOMAIN] == {}