157 lines
4.6 KiB
Python
157 lines
4.6 KiB
Python
"""Test Wallbox Select component."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.select import (
|
|
ATTR_OPTION,
|
|
DOMAIN as SELECT_DOMAIN,
|
|
SERVICE_SELECT_OPTION,
|
|
)
|
|
from homeassistant.components.wallbox.const import EcoSmartMode
|
|
from homeassistant.const import ATTR_ENTITY_ID
|
|
from homeassistant.core import HomeAssistant, HomeAssistantError
|
|
|
|
from .conftest import http_404_error, http_429_error, setup_integration
|
|
from .const import (
|
|
MOCK_SELECT_ENTITY_ID,
|
|
WALLBOX_STATUS_RESPONSE,
|
|
WALLBOX_STATUS_RESPONSE_ECO_MODE,
|
|
WALLBOX_STATUS_RESPONSE_FULL_SOLAR,
|
|
WALLBOX_STATUS_RESPONSE_NO_POWER_BOOST,
|
|
)
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
TEST_OPTIONS = [
|
|
(EcoSmartMode.OFF, WALLBOX_STATUS_RESPONSE),
|
|
(EcoSmartMode.ECO_MODE, WALLBOX_STATUS_RESPONSE_ECO_MODE),
|
|
(EcoSmartMode.FULL_SOLAR, WALLBOX_STATUS_RESPONSE_FULL_SOLAR),
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize(("mode", "response"), TEST_OPTIONS)
|
|
async def test_wallbox_select_solar_charging_class(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mode, response, mock_wallbox
|
|
) -> None:
|
|
"""Test wallbox select class."""
|
|
with patch.object(mock_wallbox, "getChargerStatus", return_value=response):
|
|
await setup_integration(hass, entry)
|
|
|
|
await hass.services.async_call(
|
|
SELECT_DOMAIN,
|
|
SERVICE_SELECT_OPTION,
|
|
{
|
|
ATTR_ENTITY_ID: MOCK_SELECT_ENTITY_ID,
|
|
ATTR_OPTION: mode,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
state = hass.states.get(MOCK_SELECT_ENTITY_ID)
|
|
assert state.state == mode
|
|
|
|
|
|
async def test_wallbox_select_no_power_boost_class(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mock_wallbox
|
|
) -> None:
|
|
"""Test wallbox select class."""
|
|
|
|
with patch.object(
|
|
mock_wallbox,
|
|
"getChargerStatus",
|
|
return_value=WALLBOX_STATUS_RESPONSE_NO_POWER_BOOST,
|
|
):
|
|
await setup_integration(hass, entry)
|
|
|
|
state = hass.states.get(MOCK_SELECT_ENTITY_ID)
|
|
assert state is None
|
|
|
|
|
|
@pytest.mark.parametrize(("mode", "response"), TEST_OPTIONS)
|
|
async def test_wallbox_select_class_error(
|
|
hass: HomeAssistant,
|
|
entry: MockConfigEntry,
|
|
mode,
|
|
response,
|
|
mock_wallbox,
|
|
) -> None:
|
|
"""Test wallbox select class connection error."""
|
|
|
|
await setup_integration(hass, entry)
|
|
|
|
with (
|
|
patch.object(mock_wallbox, "getChargerStatus", return_value=response),
|
|
patch.object(mock_wallbox, "disableEcoSmart", side_effect=http_404_error),
|
|
patch.object(mock_wallbox, "enableEcoSmart", side_effect=http_404_error),
|
|
pytest.raises(HomeAssistantError),
|
|
):
|
|
await hass.services.async_call(
|
|
SELECT_DOMAIN,
|
|
SERVICE_SELECT_OPTION,
|
|
{
|
|
ATTR_ENTITY_ID: MOCK_SELECT_ENTITY_ID,
|
|
ATTR_OPTION: mode,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(("mode", "response"), TEST_OPTIONS)
|
|
async def test_wallbox_select_too_many_requests_error(
|
|
hass: HomeAssistant,
|
|
entry: MockConfigEntry,
|
|
mode,
|
|
response,
|
|
mock_wallbox,
|
|
) -> None:
|
|
"""Test wallbox select class connection error."""
|
|
|
|
await setup_integration(hass, entry)
|
|
|
|
with (
|
|
patch.object(mock_wallbox, "getChargerStatus", return_value=response),
|
|
patch.object(mock_wallbox, "disableEcoSmart", side_effect=http_429_error),
|
|
patch.object(mock_wallbox, "enableEcoSmart", side_effect=http_429_error),
|
|
pytest.raises(HomeAssistantError),
|
|
):
|
|
await hass.services.async_call(
|
|
SELECT_DOMAIN,
|
|
SERVICE_SELECT_OPTION,
|
|
{
|
|
ATTR_ENTITY_ID: MOCK_SELECT_ENTITY_ID,
|
|
ATTR_OPTION: mode,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(("mode", "response"), TEST_OPTIONS)
|
|
async def test_wallbox_select_connection_error(
|
|
hass: HomeAssistant,
|
|
entry: MockConfigEntry,
|
|
mode,
|
|
response,
|
|
mock_wallbox,
|
|
) -> None:
|
|
"""Test wallbox select class connection error."""
|
|
|
|
await setup_integration(hass, entry)
|
|
|
|
with (
|
|
patch.object(mock_wallbox, "getChargerStatus", return_value=response),
|
|
patch.object(mock_wallbox, "disableEcoSmart", side_effect=ConnectionError),
|
|
patch.object(mock_wallbox, "enableEcoSmart", side_effect=ConnectionError),
|
|
pytest.raises(HomeAssistantError),
|
|
):
|
|
await hass.services.async_call(
|
|
SELECT_DOMAIN,
|
|
SERVICE_SELECT_OPTION,
|
|
{
|
|
ATTR_ENTITY_ID: MOCK_SELECT_ENTITY_ID,
|
|
ATTR_OPTION: mode,
|
|
},
|
|
blocking=True,
|
|
)
|