120 lines
4.0 KiB
Python
120 lines
4.0 KiB
Python
"""Tests for the Neato init file."""
|
|
from unittest.mock import patch
|
|
|
|
from pybotvac.exceptions import NeatoLoginException
|
|
import pytest
|
|
|
|
from homeassistant.components.neato.const import CONF_VENDOR, NEATO_DOMAIN
|
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
USERNAME = "myUsername"
|
|
PASSWORD = "myPassword"
|
|
VENDOR_NEATO = "neato"
|
|
VENDOR_VORWERK = "vorwerk"
|
|
VENDOR_INVALID = "invalid"
|
|
|
|
VALID_CONFIG = {
|
|
CONF_USERNAME: USERNAME,
|
|
CONF_PASSWORD: PASSWORD,
|
|
CONF_VENDOR: VENDOR_NEATO,
|
|
}
|
|
|
|
DIFFERENT_CONFIG = {
|
|
CONF_USERNAME: "anotherUsername",
|
|
CONF_PASSWORD: "anotherPassword",
|
|
CONF_VENDOR: VENDOR_VORWERK,
|
|
}
|
|
|
|
INVALID_CONFIG = {
|
|
CONF_USERNAME: USERNAME,
|
|
CONF_PASSWORD: PASSWORD,
|
|
CONF_VENDOR: VENDOR_INVALID,
|
|
}
|
|
|
|
|
|
@pytest.fixture(name="config_flow")
|
|
def mock_config_flow_login():
|
|
"""Mock a successful login."""
|
|
with patch("homeassistant.components.neato.config_flow.Account", return_value=True):
|
|
yield
|
|
|
|
|
|
@pytest.fixture(name="hub")
|
|
def mock_controller_login():
|
|
"""Mock a successful login."""
|
|
with patch("homeassistant.components.neato.Account", return_value=True):
|
|
yield
|
|
|
|
|
|
async def test_no_config_entry(hass):
|
|
"""There is nothing in configuration.yaml."""
|
|
res = await async_setup_component(hass, NEATO_DOMAIN, {})
|
|
assert res is True
|
|
|
|
|
|
async def test_create_valid_config_entry(hass, config_flow, hub):
|
|
"""There is something in configuration.yaml."""
|
|
assert hass.config_entries.async_entries(NEATO_DOMAIN) == []
|
|
assert await async_setup_component(hass, NEATO_DOMAIN, {NEATO_DOMAIN: VALID_CONFIG})
|
|
await hass.async_block_till_done()
|
|
|
|
entries = hass.config_entries.async_entries(NEATO_DOMAIN)
|
|
assert entries
|
|
assert entries[0].data[CONF_USERNAME] == USERNAME
|
|
assert entries[0].data[CONF_PASSWORD] == PASSWORD
|
|
assert entries[0].data[CONF_VENDOR] == VENDOR_NEATO
|
|
|
|
|
|
async def test_config_entries_in_sync(hass, hub):
|
|
"""The config entry and configuration.yaml are in sync."""
|
|
MockConfigEntry(domain=NEATO_DOMAIN, data=VALID_CONFIG).add_to_hass(hass)
|
|
|
|
assert hass.config_entries.async_entries(NEATO_DOMAIN)
|
|
assert await async_setup_component(hass, NEATO_DOMAIN, {NEATO_DOMAIN: VALID_CONFIG})
|
|
await hass.async_block_till_done()
|
|
|
|
entries = hass.config_entries.async_entries(NEATO_DOMAIN)
|
|
assert entries
|
|
assert entries[0].data[CONF_USERNAME] == USERNAME
|
|
assert entries[0].data[CONF_PASSWORD] == PASSWORD
|
|
assert entries[0].data[CONF_VENDOR] == VENDOR_NEATO
|
|
|
|
|
|
async def test_config_entries_not_in_sync(hass, config_flow, hub):
|
|
"""The config entry and configuration.yaml are not in sync."""
|
|
MockConfigEntry(domain=NEATO_DOMAIN, data=DIFFERENT_CONFIG).add_to_hass(hass)
|
|
|
|
assert hass.config_entries.async_entries(NEATO_DOMAIN)
|
|
assert await async_setup_component(hass, NEATO_DOMAIN, {NEATO_DOMAIN: VALID_CONFIG})
|
|
await hass.async_block_till_done()
|
|
|
|
entries = hass.config_entries.async_entries(NEATO_DOMAIN)
|
|
assert entries
|
|
assert entries[0].data[CONF_USERNAME] == USERNAME
|
|
assert entries[0].data[CONF_PASSWORD] == PASSWORD
|
|
assert entries[0].data[CONF_VENDOR] == VENDOR_NEATO
|
|
|
|
|
|
async def test_config_entries_not_in_sync_error(hass):
|
|
"""The config entry and configuration.yaml are not in sync, the new configuration is wrong."""
|
|
MockConfigEntry(domain=NEATO_DOMAIN, data=VALID_CONFIG).add_to_hass(hass)
|
|
|
|
assert hass.config_entries.async_entries(NEATO_DOMAIN)
|
|
with patch(
|
|
"homeassistant.components.neato.config_flow.Account",
|
|
side_effect=NeatoLoginException(),
|
|
):
|
|
assert not await async_setup_component(
|
|
hass, NEATO_DOMAIN, {NEATO_DOMAIN: DIFFERENT_CONFIG}
|
|
)
|
|
await hass.async_block_till_done()
|
|
|
|
entries = hass.config_entries.async_entries(NEATO_DOMAIN)
|
|
assert entries
|
|
assert entries[0].data[CONF_USERNAME] == USERNAME
|
|
assert entries[0].data[CONF_PASSWORD] == PASSWORD
|
|
assert entries[0].data[CONF_VENDOR] == VENDOR_NEATO
|