164 lines
5.4 KiB
Python
164 lines
5.4 KiB
Python
"""Test Wallbox Init Component."""
|
|
|
|
from datetime import datetime, timedelta
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.input_number import ATTR_VALUE, SERVICE_SET_VALUE
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
from homeassistant.const import ATTR_ENTITY_ID
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.exceptions import HomeAssistantError
|
|
|
|
from .conftest import http_403_error, http_429_error, setup_integration
|
|
from .const import (
|
|
MOCK_NUMBER_ENTITY_ENERGY_PRICE_ID,
|
|
WALLBOX_STATUS_RESPONSE_NO_POWER_BOOST,
|
|
)
|
|
|
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
|
|
|
|
|
async def test_wallbox_setup_unload_entry(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mock_wallbox
|
|
) -> None:
|
|
"""Test Wallbox Unload."""
|
|
|
|
await setup_integration(hass, entry)
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_wallbox_unload_entry_connection_error(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mock_wallbox
|
|
) -> None:
|
|
"""Test Wallbox Unload Connection Error."""
|
|
with patch.object(mock_wallbox, "authenticate", side_effect=http_403_error):
|
|
await setup_integration(hass, entry)
|
|
assert entry.state is ConfigEntryState.SETUP_ERROR
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_wallbox_refresh_failed_connection_error_too_many_requests(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mock_wallbox
|
|
) -> None:
|
|
"""Test Wallbox setup with connection error."""
|
|
|
|
with patch.object(mock_wallbox, "getChargerStatus", side_effect=http_429_error):
|
|
await setup_integration(hass, entry)
|
|
assert entry.state is ConfigEntryState.SETUP_RETRY
|
|
|
|
await hass.async_block_till_done()
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_wallbox_refresh_failed_error_auth(
|
|
hass: HomeAssistant,
|
|
entry: MockConfigEntry,
|
|
mock_wallbox,
|
|
) -> None:
|
|
"""Test Wallbox setup with authentication error."""
|
|
|
|
await setup_integration(hass, entry)
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
|
|
with (
|
|
patch.object(mock_wallbox, "authenticate", side_effect=http_403_error),
|
|
pytest.raises(HomeAssistantError),
|
|
):
|
|
await hass.services.async_call(
|
|
"number",
|
|
SERVICE_SET_VALUE,
|
|
{
|
|
ATTR_ENTITY_ID: MOCK_NUMBER_ENTITY_ENERGY_PRICE_ID,
|
|
ATTR_VALUE: 1.1,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
with (
|
|
patch.object(mock_wallbox, "authenticate", side_effect=http_429_error),
|
|
pytest.raises(HomeAssistantError),
|
|
):
|
|
await hass.services.async_call(
|
|
"number",
|
|
SERVICE_SET_VALUE,
|
|
{
|
|
ATTR_ENTITY_ID: MOCK_NUMBER_ENTITY_ENERGY_PRICE_ID,
|
|
ATTR_VALUE: 1.1,
|
|
},
|
|
blocking=True,
|
|
)
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_wallbox_refresh_failed_http_error(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mock_wallbox
|
|
) -> None:
|
|
"""Test Wallbox setup with authentication error."""
|
|
|
|
with patch.object(mock_wallbox, "getChargerStatus", side_effect=http_403_error):
|
|
await setup_integration(hass, entry)
|
|
assert entry.state is ConfigEntryState.SETUP_RETRY
|
|
await hass.async_block_till_done()
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_wallbox_refresh_failed_too_many_requests(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mock_wallbox
|
|
) -> None:
|
|
"""Test Wallbox setup with authentication error."""
|
|
|
|
await setup_integration(hass, entry)
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
|
|
with patch.object(mock_wallbox, "getChargerStatus", side_effect=http_429_error):
|
|
async_fire_time_changed(hass, datetime.now() + timedelta(seconds=120), True)
|
|
await hass.async_block_till_done()
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_wallbox_refresh_failed_connection_error(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mock_wallbox
|
|
) -> None:
|
|
"""Test Wallbox setup with connection error."""
|
|
|
|
await setup_integration(hass, entry)
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
|
|
with patch.object(mock_wallbox, "pauseChargingSession", side_effect=http_403_error):
|
|
async_fire_time_changed(hass, datetime.now() + timedelta(seconds=120), True)
|
|
await hass.async_block_till_done()
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_wallbox_setup_load_entry_no_eco_mode(
|
|
hass: HomeAssistant, entry: MockConfigEntry, mock_wallbox
|
|
) -> None:
|
|
"""Test Wallbox Unload."""
|
|
with patch.object(
|
|
mock_wallbox,
|
|
"getChargerStatus",
|
|
return_value=WALLBOX_STATUS_RESPONSE_NO_POWER_BOOST,
|
|
):
|
|
await setup_integration(hass, entry)
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|