mirror of
https://github.com/home-assistant/core
synced 2024-10-01 05:30:36 +02:00
On removal, only unload config entry if loaded (#16844)
* On removal, only unload config entry if loaded * Fix test
This commit is contained in:
parent
093285f92f
commit
a1c914dfeb
@ -340,7 +340,10 @@ class ConfigEntries:
|
||||
entry = self._entries.pop(found)
|
||||
self._async_schedule_save()
|
||||
|
||||
unloaded = await entry.async_unload(self.hass)
|
||||
if entry.state == ENTRY_STATE_LOADED:
|
||||
unloaded = await entry.async_unload(self.hass)
|
||||
else:
|
||||
unloaded = True
|
||||
|
||||
device_registry = await \
|
||||
self.hass.helpers.device_registry.async_get_registry()
|
||||
|
@ -72,7 +72,7 @@ def test_get_entries(hass, client):
|
||||
@asyncio.coroutine
|
||||
def test_remove_entry(hass, client):
|
||||
"""Test removing an entry via the API."""
|
||||
entry = MockConfigEntry(domain='demo')
|
||||
entry = MockConfigEntry(domain='demo', state=core_ce.ENTRY_STATE_LOADED)
|
||||
entry.add_to_hass(hass)
|
||||
resp = yield from client.delete(
|
||||
'/api/config/config_entries/entry/{}'.format(entry.entry_id))
|
||||
|
@ -49,7 +49,11 @@ def test_remove_entry(hass, manager):
|
||||
MockModule('comp', async_unload_entry=mock_unload_entry))
|
||||
|
||||
MockConfigEntry(domain='test', entry_id='test1').add_to_manager(manager)
|
||||
MockConfigEntry(domain='test', entry_id='test2').add_to_manager(manager)
|
||||
MockConfigEntry(
|
||||
domain='test',
|
||||
entry_id='test2',
|
||||
state=config_entries.ENTRY_STATE_LOADED
|
||||
).add_to_manager(manager)
|
||||
MockConfigEntry(domain='test', entry_id='test3').add_to_manager(manager)
|
||||
|
||||
assert [item.entry_id for item in manager.async_entries()] == \
|
||||
@ -79,7 +83,11 @@ def test_remove_entry_raises(hass, manager):
|
||||
MockModule('comp', async_unload_entry=mock_unload_entry))
|
||||
|
||||
MockConfigEntry(domain='test', entry_id='test1').add_to_manager(manager)
|
||||
MockConfigEntry(domain='test', entry_id='test2').add_to_manager(manager)
|
||||
MockConfigEntry(
|
||||
domain='test',
|
||||
entry_id='test2',
|
||||
state=config_entries.ENTRY_STATE_LOADED
|
||||
).add_to_manager(manager)
|
||||
MockConfigEntry(domain='test', entry_id='test3').add_to_manager(manager)
|
||||
|
||||
assert [item.entry_id for item in manager.async_entries()] == \
|
||||
@ -94,6 +102,33 @@ def test_remove_entry_raises(hass, manager):
|
||||
['test1', 'test3']
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def test_remove_entry_if_not_loaded(hass, manager):
|
||||
"""Test that we can remove an entry."""
|
||||
mock_unload_entry = MagicMock(return_value=mock_coro(True))
|
||||
|
||||
loader.set_component(
|
||||
hass, 'test',
|
||||
MockModule('comp', async_unload_entry=mock_unload_entry))
|
||||
|
||||
MockConfigEntry(domain='test', entry_id='test1').add_to_manager(manager)
|
||||
MockConfigEntry(domain='test', entry_id='test2').add_to_manager(manager)
|
||||
MockConfigEntry(domain='test', entry_id='test3').add_to_manager(manager)
|
||||
|
||||
assert [item.entry_id for item in manager.async_entries()] == \
|
||||
['test1', 'test2', 'test3']
|
||||
|
||||
result = yield from manager.async_remove('test2')
|
||||
|
||||
assert result == {
|
||||
'require_restart': False
|
||||
}
|
||||
assert [item.entry_id for item in manager.async_entries()] == \
|
||||
['test1', 'test3']
|
||||
|
||||
assert len(mock_unload_entry.mock_calls) == 0
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def test_add_entry_calls_setup_entry(hass, manager):
|
||||
"""Test we call setup_config_entry."""
|
||||
|
Loading…
Reference in New Issue
Block a user