67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
"""Test Litter-Robot setup process."""
 | 
						|
from unittest.mock import patch
 | 
						|
 | 
						|
from pylitterbot.exceptions import LitterRobotException, LitterRobotLoginException
 | 
						|
import pytest
 | 
						|
 | 
						|
from homeassistant.components import litterrobot
 | 
						|
from homeassistant.components.vacuum import (
 | 
						|
    DOMAIN as VACUUM_DOMAIN,
 | 
						|
    SERVICE_START,
 | 
						|
    STATE_DOCKED,
 | 
						|
)
 | 
						|
from homeassistant.config_entries import ConfigEntryState
 | 
						|
from homeassistant.const import ATTR_ENTITY_ID
 | 
						|
from homeassistant.core import HomeAssistant
 | 
						|
 | 
						|
from .common import CONFIG, VACUUM_ENTITY_ID
 | 
						|
from .conftest import setup_integration
 | 
						|
 | 
						|
from tests.common import MockConfigEntry
 | 
						|
 | 
						|
 | 
						|
async def test_unload_entry(hass: HomeAssistant, mock_account) -> None:
 | 
						|
    """Test being able to unload an entry."""
 | 
						|
    entry = await setup_integration(hass, mock_account, VACUUM_DOMAIN)
 | 
						|
 | 
						|
    vacuum = hass.states.get(VACUUM_ENTITY_ID)
 | 
						|
    assert vacuum
 | 
						|
    assert vacuum.state == STATE_DOCKED
 | 
						|
 | 
						|
    await hass.services.async_call(
 | 
						|
        VACUUM_DOMAIN,
 | 
						|
        SERVICE_START,
 | 
						|
        {ATTR_ENTITY_ID: VACUUM_ENTITY_ID},
 | 
						|
        blocking=True,
 | 
						|
    )
 | 
						|
    getattr(mock_account.robots[0], "start_cleaning").assert_called_once()
 | 
						|
 | 
						|
    assert await hass.config_entries.async_unload(entry.entry_id)
 | 
						|
    await hass.async_block_till_done()
 | 
						|
    assert hass.data[litterrobot.DOMAIN] == {}
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    ("side_effect", "expected_state"),
 | 
						|
    (
 | 
						|
        (LitterRobotLoginException, ConfigEntryState.SETUP_ERROR),
 | 
						|
        (LitterRobotException, ConfigEntryState.SETUP_RETRY),
 | 
						|
    ),
 | 
						|
)
 | 
						|
async def test_entry_not_setup(
 | 
						|
    hass: HomeAssistant, side_effect, expected_state
 | 
						|
) -> None:
 | 
						|
    """Test being able to handle config entry not setup."""
 | 
						|
    entry = MockConfigEntry(
 | 
						|
        domain=litterrobot.DOMAIN,
 | 
						|
        data=CONFIG[litterrobot.DOMAIN],
 | 
						|
    )
 | 
						|
    entry.add_to_hass(hass)
 | 
						|
 | 
						|
    with patch(
 | 
						|
        "homeassistant.components.litterrobot.hub.Account.connect",
 | 
						|
        side_effect=side_effect,
 | 
						|
    ):
 | 
						|
        await hass.config_entries.async_setup(entry.entry_id)
 | 
						|
        assert entry.state is expected_state
 |