Changed setup of EnergyZero services (#106224)
* Changed setup of energyzero services * PR review updates * Dict access instead of get Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Added tests for unloaded state --------- Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
0d7bb2d124
commit
2df9e5e7b9
5 changed files with 155 additions and 15 deletions
|
@ -6,12 +6,15 @@ import voluptuous as vol
|
|||
|
||||
from homeassistant.components.energyzero.const import DOMAIN
|
||||
from homeassistant.components.energyzero.services import (
|
||||
ATTR_CONFIG_ENTRY,
|
||||
ENERGY_SERVICE_NAME,
|
||||
GAS_SERVICE_NAME,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import ServiceValidationError
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("init_integration")
|
||||
async def test_has_services(
|
||||
|
@ -29,6 +32,7 @@ async def test_has_services(
|
|||
@pytest.mark.parametrize("end", [{"end": "2023-01-01 00:00:00"}, {}])
|
||||
async def test_service(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
snapshot: SnapshotAssertion,
|
||||
service: str,
|
||||
incl_vat: dict[str, bool],
|
||||
|
@ -36,8 +40,9 @@ async def test_service(
|
|||
end: dict[str, str],
|
||||
) -> None:
|
||||
"""Test the EnergyZero Service."""
|
||||
entry = {ATTR_CONFIG_ENTRY: mock_config_entry.entry_id}
|
||||
|
||||
data = incl_vat | start | end
|
||||
data = entry | incl_vat | start | end
|
||||
|
||||
assert snapshot == await hass.services.async_call(
|
||||
DOMAIN,
|
||||
|
@ -48,32 +53,72 @@ async def test_service(
|
|||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def config_entry_data(
|
||||
mock_config_entry: MockConfigEntry, request: pytest.FixtureRequest
|
||||
) -> dict[str, str]:
|
||||
"""Fixture for the config entry."""
|
||||
if "config_entry" in request.param and request.param["config_entry"] is True:
|
||||
return {"config_entry": mock_config_entry.entry_id}
|
||||
|
||||
return request.param
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("init_integration")
|
||||
@pytest.mark.parametrize("service", [GAS_SERVICE_NAME, ENERGY_SERVICE_NAME])
|
||||
@pytest.mark.parametrize(
|
||||
("service_data", "error", "error_message"),
|
||||
("config_entry_data", "service_data", "error", "error_message"),
|
||||
[
|
||||
({}, vol.er.Error, "required key not provided .+"),
|
||||
({}, {}, vol.er.Error, "required key not provided .+"),
|
||||
(
|
||||
{"config_entry": True},
|
||||
{},
|
||||
vol.er.Error,
|
||||
"required key not provided .+",
|
||||
),
|
||||
(
|
||||
{},
|
||||
{"incl_vat": True},
|
||||
vol.er.Error,
|
||||
"required key not provided .+",
|
||||
),
|
||||
(
|
||||
{"config_entry": True},
|
||||
{"incl_vat": "incorrect vat"},
|
||||
vol.er.Error,
|
||||
"expected bool for dictionary value .+",
|
||||
),
|
||||
(
|
||||
{"incl_vat": True, "start": "incorrect date"},
|
||||
{"config_entry": "incorrect entry"},
|
||||
{"incl_vat": True},
|
||||
ServiceValidationError,
|
||||
"Invalid config entry.+",
|
||||
),
|
||||
(
|
||||
{"config_entry": True},
|
||||
{
|
||||
"incl_vat": True,
|
||||
"start": "incorrect date",
|
||||
},
|
||||
ServiceValidationError,
|
||||
"Invalid datetime provided.",
|
||||
),
|
||||
(
|
||||
{"incl_vat": True, "end": "incorrect date"},
|
||||
{"config_entry": True},
|
||||
{
|
||||
"incl_vat": True,
|
||||
"end": "incorrect date",
|
||||
},
|
||||
ServiceValidationError,
|
||||
"Invalid datetime provided.",
|
||||
),
|
||||
],
|
||||
indirect=["config_entry_data"],
|
||||
)
|
||||
async def test_service_validation(
|
||||
hass: HomeAssistant,
|
||||
service: str,
|
||||
config_entry_data: dict[str, str],
|
||||
service_data: dict[str, str],
|
||||
error: type[Exception],
|
||||
error_message: str,
|
||||
|
@ -84,7 +129,32 @@ async def test_service_validation(
|
|||
await hass.services.async_call(
|
||||
DOMAIN,
|
||||
service,
|
||||
service_data,
|
||||
config_entry_data | service_data,
|
||||
blocking=True,
|
||||
return_response=True,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("init_integration")
|
||||
@pytest.mark.parametrize("service", [GAS_SERVICE_NAME, ENERGY_SERVICE_NAME])
|
||||
async def test_service_called_with_unloaded_entry(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
service: str,
|
||||
) -> None:
|
||||
"""Test service calls with unloaded config entry."""
|
||||
|
||||
await mock_config_entry.async_unload(hass)
|
||||
|
||||
data = {"config_entry": mock_config_entry.entry_id, "incl_vat": True}
|
||||
|
||||
with pytest.raises(
|
||||
ServiceValidationError, match=f"{mock_config_entry.title} is not loaded"
|
||||
):
|
||||
await hass.services.async_call(
|
||||
DOMAIN,
|
||||
service,
|
||||
data,
|
||||
blocking=True,
|
||||
return_response=True,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue