99 lines
3.2 KiB
Python
99 lines
3.2 KiB
Python
|
"""Tests for the Velbus config flow."""
|
||
|
from unittest.mock import patch, Mock
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
from homeassistant import data_entry_flow
|
||
|
from homeassistant.components.velbus import config_flow
|
||
|
from homeassistant.const import CONF_PORT, CONF_NAME
|
||
|
|
||
|
from tests.common import MockConfigEntry
|
||
|
|
||
|
PORT_SERIAL = '/dev/ttyACME100'
|
||
|
PORT_TCP = '127.0.1.0.1:3788'
|
||
|
|
||
|
|
||
|
@pytest.fixture(name='controller_assert')
|
||
|
def mock_controller_assert():
|
||
|
"""Mock the velbus controller with an assert."""
|
||
|
with patch('velbus.Controller', side_effect=Exception()):
|
||
|
yield
|
||
|
|
||
|
|
||
|
@pytest.fixture(name='controller')
|
||
|
def mock_controller():
|
||
|
"""Mock a successfull velbus controller."""
|
||
|
controller = Mock()
|
||
|
with patch('velbus.Controller', return_value=controller):
|
||
|
yield controller
|
||
|
|
||
|
|
||
|
def init_config_flow(hass):
|
||
|
"""Init a configuration flow."""
|
||
|
flow = config_flow.VelbusConfigFlow()
|
||
|
flow.hass = hass
|
||
|
return flow
|
||
|
|
||
|
|
||
|
async def test_user(hass, controller):
|
||
|
"""Test user config."""
|
||
|
flow = init_config_flow(hass)
|
||
|
|
||
|
result = await flow.async_step_user()
|
||
|
assert result['type'] == data_entry_flow.RESULT_TYPE_FORM
|
||
|
assert result['step_id'] == 'user'
|
||
|
|
||
|
result = await flow.async_step_user({
|
||
|
CONF_NAME: 'Velbus Test Serial', CONF_PORT: PORT_SERIAL})
|
||
|
assert result['type'] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||
|
assert result['title'] == 'velbus_test_serial'
|
||
|
assert result['data'][CONF_PORT] == PORT_SERIAL
|
||
|
|
||
|
result = await flow.async_step_user({
|
||
|
CONF_NAME: 'Velbus Test TCP', CONF_PORT: PORT_TCP})
|
||
|
assert result['type'] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||
|
assert result['title'] == 'velbus_test_tcp'
|
||
|
assert result['data'][CONF_PORT] == PORT_TCP
|
||
|
|
||
|
|
||
|
async def test_user_fail(hass, controller_assert):
|
||
|
"""Test user config."""
|
||
|
flow = init_config_flow(hass)
|
||
|
|
||
|
result = await flow.async_step_user({
|
||
|
CONF_NAME: 'Velbus Test Serial', CONF_PORT: PORT_SERIAL})
|
||
|
assert result['type'] == data_entry_flow.RESULT_TYPE_FORM
|
||
|
assert result['errors'] == {CONF_PORT: 'connection_failed'}
|
||
|
|
||
|
result = await flow.async_step_user({
|
||
|
CONF_NAME: 'Velbus Test TCP', CONF_PORT: PORT_TCP})
|
||
|
assert result['type'] == data_entry_flow.RESULT_TYPE_FORM
|
||
|
assert result['errors'] == {CONF_PORT: 'connection_failed'}
|
||
|
|
||
|
|
||
|
async def test_import(hass, controller):
|
||
|
"""Test import step."""
|
||
|
flow = init_config_flow(hass)
|
||
|
|
||
|
result = await flow.async_step_import({CONF_PORT: PORT_TCP})
|
||
|
assert result['type'] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||
|
assert result['title'] == 'velbus_import'
|
||
|
|
||
|
|
||
|
async def test_abort_if_already_setup(hass):
|
||
|
"""Test we abort if Daikin is already setup."""
|
||
|
flow = init_config_flow(hass)
|
||
|
MockConfigEntry(domain='velbus',
|
||
|
data={CONF_PORT: PORT_TCP,
|
||
|
CONF_NAME: 'velbus home'}).add_to_hass(hass)
|
||
|
|
||
|
result = await flow.async_step_import(
|
||
|
{CONF_PORT: PORT_TCP, CONF_NAME: 'velbus import test'})
|
||
|
assert result['type'] == data_entry_flow.RESULT_TYPE_ABORT
|
||
|
assert result['reason'] == 'port_exists'
|
||
|
|
||
|
result = await flow.async_step_user(
|
||
|
{CONF_PORT: PORT_TCP, CONF_NAME: 'velbus import test'})
|
||
|
assert result['type'] == data_entry_flow.RESULT_TYPE_FORM
|
||
|
assert result['errors'] == {'port': 'port_exists'}
|