91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
"""Tests for the services provided by the EnergyZero integration."""
|
|
|
|
import pytest
|
|
from syrupy.assertion import SnapshotAssertion
|
|
import voluptuous as vol
|
|
|
|
from homeassistant.components.energyzero.const import DOMAIN
|
|
from homeassistant.components.energyzero.services import (
|
|
ENERGY_SERVICE_NAME,
|
|
GAS_SERVICE_NAME,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.exceptions import ServiceValidationError
|
|
|
|
|
|
@pytest.mark.usefixtures("init_integration")
|
|
async def test_has_services(
|
|
hass: HomeAssistant,
|
|
) -> None:
|
|
"""Test the existence of the EnergyZero Service."""
|
|
assert hass.services.has_service(DOMAIN, GAS_SERVICE_NAME)
|
|
assert hass.services.has_service(DOMAIN, ENERGY_SERVICE_NAME)
|
|
|
|
|
|
@pytest.mark.usefixtures("init_integration")
|
|
@pytest.mark.parametrize("service", [GAS_SERVICE_NAME, ENERGY_SERVICE_NAME])
|
|
@pytest.mark.parametrize("incl_vat", [{"incl_vat": False}, {"incl_vat": True}])
|
|
@pytest.mark.parametrize("start", [{"start": "2023-01-01 00:00:00"}, {}])
|
|
@pytest.mark.parametrize("end", [{"end": "2023-01-01 00:00:00"}, {}])
|
|
async def test_service(
|
|
hass: HomeAssistant,
|
|
snapshot: SnapshotAssertion,
|
|
service: str,
|
|
incl_vat: dict[str, bool],
|
|
start: dict[str, str],
|
|
end: dict[str, str],
|
|
) -> None:
|
|
"""Test the EnergyZero Service."""
|
|
|
|
data = incl_vat | start | end
|
|
|
|
assert snapshot == await hass.services.async_call(
|
|
DOMAIN,
|
|
service,
|
|
data,
|
|
blocking=True,
|
|
return_response=True,
|
|
)
|
|
|
|
|
|
@pytest.mark.usefixtures("init_integration")
|
|
@pytest.mark.parametrize("service", [GAS_SERVICE_NAME, ENERGY_SERVICE_NAME])
|
|
@pytest.mark.parametrize(
|
|
("service_data", "error", "error_message"),
|
|
[
|
|
({}, vol.er.Error, "required key not provided .+"),
|
|
(
|
|
{"incl_vat": "incorrect vat"},
|
|
vol.er.Error,
|
|
"expected bool for dictionary value .+",
|
|
),
|
|
(
|
|
{"incl_vat": True, "start": "incorrect date"},
|
|
ServiceValidationError,
|
|
"Invalid datetime provided.",
|
|
),
|
|
(
|
|
{"incl_vat": True, "end": "incorrect date"},
|
|
ServiceValidationError,
|
|
"Invalid datetime provided.",
|
|
),
|
|
],
|
|
)
|
|
async def test_service_validation(
|
|
hass: HomeAssistant,
|
|
service: str,
|
|
service_data: dict[str, str],
|
|
error: type[Exception],
|
|
error_message: str,
|
|
) -> None:
|
|
"""Test the EnergyZero Service validation."""
|
|
|
|
with pytest.raises(error, match=error_message):
|
|
await hass.services.async_call(
|
|
DOMAIN,
|
|
service,
|
|
service_data,
|
|
blocking=True,
|
|
return_response=True,
|
|
)
|