KNX tests: Support loading different config store fixtures (#136961)
* Support loading different config store fixtures * Add config store test for binary sensor * Update README.md * remove unused fixture * AddAdd config store test for switchpull/135411/merge
parent
609188bb33
commit
8a08a87a25
|
@ -3,17 +3,22 @@
|
|||
A KNXTestKit instance can be requested from a fixture. It provides convenience methods
|
||||
to test outgoing KNX telegrams and inject incoming telegrams.
|
||||
To test something add a test function requesting the `hass` and `knx` fixture and
|
||||
set up the KNX integration by passing a KNX config dict to `knx.setup_integration`.
|
||||
set up the KNX integration with `knx.setup_integration`.
|
||||
You can pass a KNX YAML-config dict or a ConfigStore fixture filename to the setup method. The fixture should be placed in the `tests/components/knx/fixtures` directory.
|
||||
|
||||
```python
|
||||
async def test_something(hass, knx):
|
||||
await knx.setup_integration({
|
||||
async def test_some_yaml(hass: HomeAssistant, knx: KNXTestKit):
|
||||
await knx.setup_integration(
|
||||
yaml_config={
|
||||
"switch": {
|
||||
"name": "test_switch",
|
||||
"address": "1/2/3",
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
async def test_some_config_store(hass: HomeAssistant, knx: KNXTestKit):
|
||||
await knx.setup_integration(config_store_fixture="config_store_filename.json")
|
||||
```
|
||||
|
||||
## Asserting outgoing telegrams
|
||||
|
|
|
@ -44,7 +44,6 @@ from tests.common import MockConfigEntry, load_json_object_fixture
|
|||
from tests.typing import WebSocketGenerator
|
||||
|
||||
FIXTURE_PROJECT_DATA = load_json_object_fixture("project.json", KNX_DOMAIN)
|
||||
FIXTURE_CONFIG_STORAGE_DATA = load_json_object_fixture("config_store.json", KNX_DOMAIN)
|
||||
|
||||
|
||||
class KNXTestKit:
|
||||
|
@ -52,10 +51,16 @@ class KNXTestKit:
|
|||
|
||||
INDIVIDUAL_ADDRESS = "1.2.3"
|
||||
|
||||
def __init__(self, hass: HomeAssistant, mock_config_entry: MockConfigEntry) -> None:
|
||||
def __init__(
|
||||
self,
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
hass_storage: dict[str, Any],
|
||||
) -> None:
|
||||
"""Init KNX test helper class."""
|
||||
self.hass: HomeAssistant = hass
|
||||
self.mock_config_entry: MockConfigEntry = mock_config_entry
|
||||
self.hass_storage: dict[str, Any] = hass_storage
|
||||
self.xknx: XKNX
|
||||
# outgoing telegrams will be put in the List instead of sent to the interface
|
||||
# telegrams to an InternalGroupAddress won't be queued here
|
||||
|
@ -69,7 +74,10 @@ class KNXTestKit:
|
|||
assert test_state.attributes.get(attribute) == value
|
||||
|
||||
async def setup_integration(
|
||||
self, config: ConfigType, add_entry_to_hass: bool = True
|
||||
self,
|
||||
yaml_config: ConfigType | None = None,
|
||||
config_store_fixture: str | None = None,
|
||||
add_entry_to_hass: bool = True,
|
||||
) -> None:
|
||||
"""Create the KNX integration."""
|
||||
|
||||
|
@ -101,15 +109,21 @@ class KNXTestKit:
|
|||
self.xknx = args[0]
|
||||
return DEFAULT
|
||||
|
||||
if config_store_fixture:
|
||||
self.hass_storage[KNX_CONFIG_STORAGE_KEY] = load_json_object_fixture(
|
||||
config_store_fixture, KNX_DOMAIN
|
||||
)
|
||||
|
||||
if add_entry_to_hass:
|
||||
self.mock_config_entry.add_to_hass(self.hass)
|
||||
|
||||
knx_config = {KNX_DOMAIN: yaml_config or {}}
|
||||
with patch(
|
||||
"xknx.xknx.knx_interface_factory",
|
||||
return_value=knx_ip_interface_mock(),
|
||||
side_effect=fish_xknx,
|
||||
):
|
||||
await async_setup_component(self.hass, KNX_DOMAIN, {KNX_DOMAIN: config})
|
||||
await async_setup_component(self.hass, KNX_DOMAIN, knx_config)
|
||||
await self.hass.async_block_till_done()
|
||||
|
||||
########################
|
||||
|
@ -306,9 +320,13 @@ def mock_config_entry() -> MockConfigEntry:
|
|||
|
||||
|
||||
@pytest.fixture
|
||||
async def knx(hass: HomeAssistant, mock_config_entry: MockConfigEntry):
|
||||
async def knx(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
hass_storage: dict[str, Any],
|
||||
):
|
||||
"""Create a KNX TestKit instance."""
|
||||
knx_test_kit = KNXTestKit(hass, mock_config_entry)
|
||||
knx_test_kit = KNXTestKit(hass, mock_config_entry, hass_storage)
|
||||
yield knx_test_kit
|
||||
await knx_test_kit.assert_no_telegram()
|
||||
|
||||
|
@ -322,12 +340,6 @@ def load_knxproj(hass_storage: dict[str, Any]) -> None:
|
|||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def load_config_store(hass_storage: dict[str, Any]) -> None:
|
||||
"""Mock KNX config store data."""
|
||||
hass_storage[KNX_CONFIG_STORAGE_KEY] = FIXTURE_CONFIG_STORAGE_DATA
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def create_ui_entity(
|
||||
hass: HomeAssistant,
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "knx/config_store.json",
|
||||
"data": {
|
||||
"entities": {
|
||||
"light": {},
|
||||
"binary_sensor": {
|
||||
"knx_es_01JJP1XDQRXB0W6YYGXW6Y1X10": {
|
||||
"entity": {
|
||||
"name": "test",
|
||||
"device_info": null,
|
||||
"entity_category": null
|
||||
},
|
||||
"knx": {
|
||||
"ga_sensor": {
|
||||
"state": "3/2/21",
|
||||
"passive": []
|
||||
},
|
||||
"respond_to_read": false,
|
||||
"sync_state": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -329,7 +329,7 @@ async def test_binary_sensor_ui_create(
|
|||
knx_data: dict[str, Any],
|
||||
) -> None:
|
||||
"""Test creating a binary sensor."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
await create_ui_entity(
|
||||
platform=Platform.BINARY_SENSOR,
|
||||
entity_data={"name": "test"},
|
||||
|
@ -340,3 +340,10 @@ async def test_binary_sensor_ui_create(
|
|||
await knx.receive_response("2/2/2", not knx_data.get("invert"))
|
||||
state = hass.states.get("binary_sensor.test")
|
||||
assert state.state is STATE_ON
|
||||
|
||||
|
||||
async def test_binary_sensor_ui_load(knx: KNXTestKit) -> None:
|
||||
"""Test loading a binary sensor from storage."""
|
||||
await knx.setup_integration(config_store_fixture="config_store_binarysensor.json")
|
||||
await knx.assert_read("3/2/21", response=True, ignore_order=True)
|
||||
knx.assert_state("binary_sensor.test", STATE_ON)
|
||||
|
|
|
@ -1278,7 +1278,7 @@ async def test_options_flow_connection_type(
|
|||
# usage of the already running XKNX instance for gateway scanner
|
||||
gateway = _gateway_descriptor("192.168.0.1", 3675)
|
||||
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
menu_step = await hass.config_entries.options.async_init(mock_config_entry.entry_id)
|
||||
|
||||
with patch(
|
||||
|
|
|
@ -25,7 +25,7 @@ async def test_create_entity(
|
|||
create_ui_entity: KnxEntityGenerator,
|
||||
) -> None:
|
||||
"""Test entity creation."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
test_name = "Test no device"
|
||||
|
@ -69,7 +69,7 @@ async def test_create_entity_error(
|
|||
hass_ws_client: WebSocketGenerator,
|
||||
) -> None:
|
||||
"""Test unsuccessful entity creation."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
# create entity with invalid platform
|
||||
|
@ -116,7 +116,7 @@ async def test_update_entity(
|
|||
create_ui_entity: KnxEntityGenerator,
|
||||
) -> None:
|
||||
"""Test entity update."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
test_entity = await create_ui_entity(
|
||||
|
@ -163,7 +163,7 @@ async def test_update_entity_error(
|
|||
create_ui_entity: KnxEntityGenerator,
|
||||
) -> None:
|
||||
"""Test entity update."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
test_entity = await create_ui_entity(
|
||||
|
@ -238,7 +238,7 @@ async def test_delete_entity(
|
|||
create_ui_entity: KnxEntityGenerator,
|
||||
) -> None:
|
||||
"""Test entity deletion."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
test_entity = await create_ui_entity(
|
||||
|
@ -270,7 +270,7 @@ async def test_delete_entity_error(
|
|||
hass_storage: dict[str, Any],
|
||||
) -> None:
|
||||
"""Test unsuccessful entity deletion."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
# delete unknown entity
|
||||
|
@ -307,7 +307,7 @@ async def test_get_entity_config(
|
|||
create_ui_entity: KnxEntityGenerator,
|
||||
) -> None:
|
||||
"""Test entity config retrieval."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
test_entity = await create_ui_entity(
|
||||
|
@ -355,7 +355,7 @@ async def test_get_entity_config_error(
|
|||
error_message_start: str,
|
||||
) -> None:
|
||||
"""Test entity config retrieval errors."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
await client.send_json_auto_id(
|
||||
|
@ -376,7 +376,7 @@ async def test_validate_entity(
|
|||
hass_ws_client: WebSocketGenerator,
|
||||
) -> None:
|
||||
"""Test entity validation."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
await client.send_json_auto_id(
|
||||
|
|
|
@ -22,7 +22,7 @@ async def test_create_device(
|
|||
hass_ws_client: WebSocketGenerator,
|
||||
) -> None:
|
||||
"""Test device creation."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
await client.send_json_auto_id(
|
||||
|
@ -50,12 +50,11 @@ async def test_remove_device(
|
|||
device_registry: dr.DeviceRegistry,
|
||||
entity_registry: er.EntityRegistry,
|
||||
hass_ws_client: WebSocketGenerator,
|
||||
load_config_store: None,
|
||||
hass_storage: dict[str, Any],
|
||||
) -> None:
|
||||
"""Test device removal."""
|
||||
assert await async_setup_component(hass, "config", {})
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration(config_store_fixture="config_store_light_switch.json")
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
await knx.assert_read("1/0/21", response=True, ignore_order=True) # test light
|
||||
|
|
|
@ -28,7 +28,7 @@ async def test_if_fires_on_telegram(
|
|||
knx: KNXTestKit,
|
||||
) -> None:
|
||||
"""Test telegram device triggers firing."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
device_entry = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, f"_{knx.mock_config_entry.entry_id}_interface")}
|
||||
)
|
||||
|
@ -124,7 +124,7 @@ async def test_default_if_fires_on_telegram(
|
|||
# by default (without a user changing any) extra_fields are not added to the trigger and
|
||||
# pre 2024.2 device triggers did only support "destination" field so they didn't have
|
||||
# "group_value_write", "group_value_response", "group_value_read", "incoming", "outgoing"
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
device_entry = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, f"_{knx.mock_config_entry.entry_id}_interface")}
|
||||
)
|
||||
|
@ -206,7 +206,7 @@ async def test_remove_device_trigger(
|
|||
) -> None:
|
||||
"""Test for removed callback when device trigger not used."""
|
||||
automation_name = "telegram_trigger_automation"
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
device_entry = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, f"_{knx.mock_config_entry.entry_id}_interface")}
|
||||
)
|
||||
|
@ -256,7 +256,7 @@ async def test_get_triggers(
|
|||
knx: KNXTestKit,
|
||||
) -> None:
|
||||
"""Test we get the expected device triggers from knx."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
device_entry = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, f"_{knx.mock_config_entry.entry_id}_interface")}
|
||||
)
|
||||
|
@ -279,7 +279,7 @@ async def test_get_trigger_capabilities(
|
|||
knx: KNXTestKit,
|
||||
) -> None:
|
||||
"""Test we get the expected capabilities telegram device trigger."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
device_entry = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, f"_{knx.mock_config_entry.entry_id}_interface")}
|
||||
)
|
||||
|
@ -361,7 +361,7 @@ async def test_invalid_device_trigger(
|
|||
caplog: pytest.LogCaptureFixture,
|
||||
) -> None:
|
||||
"""Test invalid telegram device trigger configuration."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
device_entry = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, f"_{knx.mock_config_entry.entry_id}_interface")}
|
||||
)
|
||||
|
@ -404,7 +404,7 @@ async def test_invalid_trigger_configuration(
|
|||
knx: KNXTestKit,
|
||||
) -> None:
|
||||
"""Test invalid telegram device trigger configuration at attach_trigger."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
device_entry = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, f"_{knx.mock_config_entry.entry_id}_interface")}
|
||||
)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
"""Tests for the diagnostics data provided by the KNX integration."""
|
||||
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
from syrupy import SnapshotAssertion
|
||||
from xknx.io import DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT
|
||||
|
@ -40,7 +42,7 @@ async def test_diagnostics(
|
|||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test diagnostics."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
# Overwrite the version for this test since we don't want to change this with every library bump
|
||||
knx.xknx.version = "0.0.0"
|
||||
|
@ -60,7 +62,7 @@ async def test_diagnostic_config_error(
|
|||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test diagnostics."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
# Overwrite the version for this test since we don't want to change this with every library bump
|
||||
knx.xknx.version = "0.0.0"
|
||||
|
@ -76,6 +78,7 @@ async def test_diagnostic_config_error(
|
|||
async def test_diagnostic_redact(
|
||||
hass: HomeAssistant,
|
||||
hass_client: ClientSessionGenerator,
|
||||
hass_storage: dict[str, Any],
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test diagnostics redacting data."""
|
||||
|
@ -95,8 +98,8 @@ async def test_diagnostic_redact(
|
|||
CONF_KNX_ROUTING_BACKBONE_KEY: "bbaacc44bbaacc44bbaacc44bbaacc44",
|
||||
},
|
||||
)
|
||||
knx: KNXTestKit = KNXTestKit(hass, mock_config_entry)
|
||||
await knx.setup_integration({})
|
||||
knx: KNXTestKit = KNXTestKit(hass, mock_config_entry, hass_storage)
|
||||
await knx.setup_integration()
|
||||
|
||||
# Overwrite the version for this test since we don't want to change this with every library bump
|
||||
knx.xknx.version = "0.0.0"
|
||||
|
@ -117,7 +120,7 @@ async def test_diagnostics_project(
|
|||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test diagnostics."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
knx.xknx.version = "0.0.0"
|
||||
# snapshot will contain project specific fields in `project_info`
|
||||
assert (
|
||||
|
|
|
@ -226,7 +226,7 @@ async def test_init_connection_handling(
|
|||
data=config_entry_data,
|
||||
)
|
||||
knx.mock_config_entry = config_entry
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
assert hass.data.get(KNX_DOMAIN) is not None
|
||||
|
||||
|
@ -280,7 +280,7 @@ async def _init_switch_and_wait_for_first_state_updater_run(
|
|||
title="KNX", domain=KNX_DOMAIN, data=config_entry_data
|
||||
)
|
||||
knx.mock_config_entry = config_entry
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
await create_ui_entity(
|
||||
platform=Platform.SWITCH,
|
||||
knx_data={
|
||||
|
@ -354,7 +354,7 @@ async def test_async_remove_entry(
|
|||
},
|
||||
)
|
||||
knx.mock_config_entry = config_entry
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
with (
|
||||
patch("pathlib.Path.unlink") as unlink_mock,
|
||||
|
|
|
@ -25,7 +25,7 @@ async def test_diagnostic_entities(
|
|||
freezer: FrozenDateTimeFactory,
|
||||
) -> None:
|
||||
"""Test diagnostic entities."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
for entity_id in (
|
||||
"sensor.knx_interface_individual_address",
|
||||
|
@ -103,7 +103,7 @@ async def test_removed_entity(
|
|||
with patch(
|
||||
"xknx.core.connection_manager.ConnectionManager.unregister_connection_state_changed_cb"
|
||||
) as unregister_mock:
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
entity_registry.async_update_entity(
|
||||
"sensor.knx_interface_connection_established",
|
||||
|
@ -120,7 +120,7 @@ async def test_remove_interface_device(
|
|||
) -> None:
|
||||
"""Test device removal."""
|
||||
assert await async_setup_component(hass, "config", {})
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
knx_devices = device_registry.devices.get_devices_for_config_entry_id(
|
||||
knx.mock_config_entry.entry_id
|
||||
|
|
|
@ -1176,7 +1176,7 @@ async def test_light_ui_create(
|
|||
create_ui_entity: KnxEntityGenerator,
|
||||
) -> None:
|
||||
"""Test creating a light."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
await create_ui_entity(
|
||||
platform=Platform.LIGHT,
|
||||
entity_data={"name": "test"},
|
||||
|
@ -1213,7 +1213,7 @@ async def test_light_ui_color_temp(
|
|||
raw_ct: tuple[int, ...],
|
||||
) -> None:
|
||||
"""Test creating a color-temp light."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
await create_ui_entity(
|
||||
platform=Platform.LIGHT,
|
||||
entity_data={"name": "test"},
|
||||
|
@ -1250,7 +1250,7 @@ async def test_light_ui_multi_mode(
|
|||
create_ui_entity: KnxEntityGenerator,
|
||||
) -> None:
|
||||
"""Test creating a light with multiple color modes."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
await create_ui_entity(
|
||||
platform=Platform.LIGHT,
|
||||
entity_data={"name": "test"},
|
||||
|
@ -1335,13 +1335,11 @@ async def test_light_ui_multi_mode(
|
|||
|
||||
|
||||
async def test_light_ui_load(
|
||||
hass: HomeAssistant,
|
||||
knx: KNXTestKit,
|
||||
load_config_store: None,
|
||||
entity_registry: er.EntityRegistry,
|
||||
) -> None:
|
||||
"""Test loading a light from storage."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration(config_store_fixture="config_store_light_switch.json")
|
||||
|
||||
await knx.assert_read("1/0/21", response=True, ignore_order=True)
|
||||
# unrelated switch in config store
|
||||
|
|
|
@ -111,7 +111,7 @@ async def test_send(
|
|||
expected_apci,
|
||||
) -> None:
|
||||
"""Test `knx.send` service."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
await hass.services.async_call(
|
||||
"knx",
|
||||
|
@ -127,7 +127,7 @@ async def test_send(
|
|||
|
||||
async def test_read(hass: HomeAssistant, knx: KNXTestKit) -> None:
|
||||
"""Test `knx.read` service."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
# send read telegram
|
||||
await hass.services.async_call("knx", "read", {"address": "1/1/1"}, blocking=True)
|
||||
|
@ -150,7 +150,7 @@ async def test_event_register(hass: HomeAssistant, knx: KNXTestKit) -> None:
|
|||
events = async_capture_events(hass, "knx_event")
|
||||
test_address = "1/2/3"
|
||||
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
# no event registered
|
||||
await knx.receive_write(test_address, True)
|
||||
|
@ -200,7 +200,7 @@ async def test_exposure_register(hass: HomeAssistant, knx: KNXTestKit) -> None:
|
|||
test_entity = "fake.entity"
|
||||
test_attribute = "fake_attribute"
|
||||
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
# no exposure registered
|
||||
hass.states.async_set(test_entity, STATE_ON, {})
|
||||
|
@ -265,7 +265,7 @@ async def test_reload_service(
|
|||
knx: KNXTestKit,
|
||||
) -> None:
|
||||
"""Test reload service."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
with (
|
||||
patch(
|
||||
|
@ -285,7 +285,7 @@ async def test_reload_service(
|
|||
|
||||
async def test_service_setup_failed(hass: HomeAssistant, knx: KNXTestKit) -> None:
|
||||
"""Test service setup failed."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
await hass.config_entries.async_unload(knx.mock_config_entry.entry_id)
|
||||
|
||||
with pytest.raises(HomeAssistantError) as exc_info:
|
||||
|
|
|
@ -155,7 +155,7 @@ async def test_switch_ui_create(
|
|||
create_ui_entity: KnxEntityGenerator,
|
||||
) -> None:
|
||||
"""Test creating a switch."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
await create_ui_entity(
|
||||
platform=Platform.SWITCH,
|
||||
entity_data={"name": "test"},
|
||||
|
@ -171,3 +171,16 @@ async def test_switch_ui_create(
|
|||
await knx.receive_response("2/2/2", True)
|
||||
state = hass.states.get("switch.test")
|
||||
assert state.state is STATE_ON
|
||||
|
||||
|
||||
async def test_switch_ui_load(knx: KNXTestKit) -> None:
|
||||
"""Test loading a switch from storage."""
|
||||
await knx.setup_integration(config_store_fixture="config_store_light_switch.json")
|
||||
|
||||
await knx.assert_read("1/0/45", response=True, ignore_order=True)
|
||||
# unrelated light in config store
|
||||
await knx.assert_read("1/0/21", response=True, ignore_order=True)
|
||||
knx.assert_state(
|
||||
"switch.none_test", # has_entity_name with unregistered device -> none_test
|
||||
STATE_ON,
|
||||
)
|
||||
|
|
|
@ -70,7 +70,7 @@ async def test_store_telegam_history(
|
|||
hass_storage: dict[str, Any],
|
||||
) -> None:
|
||||
"""Test storing telegram history."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
await knx.receive_write("1/3/4", True)
|
||||
await hass.services.async_call(
|
||||
|
@ -94,7 +94,7 @@ async def test_load_telegam_history(
|
|||
) -> None:
|
||||
"""Test telegram history restoration."""
|
||||
hass_storage["knx/telegrams_history.json"] = {"version": 1, "data": MOCK_TELEGRAMS}
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
loaded_telegrams = hass.data[KNX_MODULE_KEY].telegrams.recent_telegrams
|
||||
assert assert_telegram_history(loaded_telegrams)
|
||||
# TelegramDict "payload" is a tuple, this shall be restored when loading from JSON
|
||||
|
@ -113,7 +113,7 @@ async def test_remove_telegam_history(
|
|||
knx.mock_config_entry,
|
||||
data=knx.mock_config_entry.data | {CONF_KNX_TELEGRAM_LOG_SIZE: 0},
|
||||
)
|
||||
await knx.setup_integration({}, add_entry_to_hass=False)
|
||||
await knx.setup_integration(add_entry_to_hass=False)
|
||||
# Store.async_remove() is mocked by hass_storage - check that data was removed.
|
||||
assert "knx/telegrams_history.json" not in hass_storage
|
||||
assert not hass.data[KNX_MODULE_KEY].telegrams.recent_telegrams
|
||||
|
|
|
@ -18,7 +18,7 @@ async def test_telegram_trigger(
|
|||
knx: KNXTestKit,
|
||||
) -> None:
|
||||
"""Test telegram triggers firing."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
# "id" field added to action to test if `trigger_data` passed correctly in `async_attach_trigger`
|
||||
assert await async_setup_component(
|
||||
|
@ -105,7 +105,7 @@ async def test_telegram_trigger_dpt_option(
|
|||
expected_unit: str | None,
|
||||
) -> None:
|
||||
"""Test telegram trigger type option."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
automation.DOMAIN,
|
||||
|
@ -190,7 +190,7 @@ async def test_telegram_trigger_options(
|
|||
direction_options: dict[str, bool],
|
||||
) -> None:
|
||||
"""Test telegram trigger options."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
automation.DOMAIN,
|
||||
|
@ -266,7 +266,7 @@ async def test_remove_telegram_trigger(
|
|||
) -> None:
|
||||
"""Test for removed callback when telegram trigger not used."""
|
||||
automation_name = "telegram_trigger_automation"
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
|
@ -311,7 +311,7 @@ async def test_invalid_trigger(
|
|||
caplog: pytest.LogCaptureFixture,
|
||||
) -> None:
|
||||
"""Test invalid telegram trigger configuration."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
caplog.clear()
|
||||
with caplog.at_level(logging.ERROR):
|
||||
assert await async_setup_component(
|
||||
|
|
|
@ -20,7 +20,7 @@ async def test_knx_info_command(
|
|||
hass: HomeAssistant, knx: KNXTestKit, hass_ws_client: WebSocketGenerator
|
||||
) -> None:
|
||||
"""Test knx/info command."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
await client.send_json({"id": 6, "type": "knx/info"})
|
||||
|
||||
|
@ -39,7 +39,7 @@ async def test_knx_info_command_with_project(
|
|||
load_knxproj: None,
|
||||
) -> None:
|
||||
"""Test knx/info command with loaded project."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
await client.send_json({"id": 6, "type": "knx/info"})
|
||||
|
||||
|
@ -65,7 +65,7 @@ async def test_knx_project_file_process(
|
|||
_password = "pw-test"
|
||||
_parse_result = FIXTURE_PROJECT_DATA
|
||||
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
assert not hass.data[KNX_MODULE_KEY].project.loaded
|
||||
|
||||
|
@ -100,7 +100,7 @@ async def test_knx_project_file_process_error(
|
|||
hass_ws_client: WebSocketGenerator,
|
||||
) -> None:
|
||||
"""Test knx/project_file_process exception handling."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
assert not hass.data[KNX_MODULE_KEY].project.loaded
|
||||
|
||||
|
@ -134,7 +134,7 @@ async def test_knx_project_file_remove(
|
|||
hass_storage: dict[str, Any],
|
||||
) -> None:
|
||||
"""Test knx/project_file_remove command."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
assert hass_storage[KNX_PROJECT_STORAGE_KEY]
|
||||
client = await hass_ws_client(hass)
|
||||
assert hass.data[KNX_MODULE_KEY].project.loaded
|
||||
|
@ -154,7 +154,7 @@ async def test_knx_get_project(
|
|||
load_knxproj: None,
|
||||
) -> None:
|
||||
"""Test retrieval of kxnproject from store."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
assert hass.data[KNX_MODULE_KEY].project.loaded
|
||||
|
||||
|
@ -169,7 +169,7 @@ async def test_knx_group_monitor_info_command(
|
|||
hass: HomeAssistant, knx: KNXTestKit, hass_ws_client: WebSocketGenerator
|
||||
) -> None:
|
||||
"""Test knx/group_monitor_info command."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
await client.send_json({"id": 6, "type": "knx/group_monitor_info"})
|
||||
|
@ -184,7 +184,7 @@ async def test_knx_group_telegrams_command(
|
|||
hass: HomeAssistant, knx: KNXTestKit, hass_ws_client: WebSocketGenerator
|
||||
) -> None:
|
||||
"""Test knx/group_telegrams command."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
await client.send_json_auto_id({"type": "knx/group_telegrams"})
|
||||
|
@ -338,7 +338,7 @@ async def test_knx_subscribe_telegrams_command_project(
|
|||
load_knxproj: None,
|
||||
) -> None:
|
||||
"""Test knx/subscribe_telegrams command with project data."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
client = await hass_ws_client(hass)
|
||||
await client.send_json({"id": 6, "type": "knx/subscribe_telegrams"})
|
||||
res = await client.receive_json()
|
||||
|
@ -405,7 +405,7 @@ async def test_websocket_when_config_entry_unloaded(
|
|||
endpoint: str,
|
||||
) -> None:
|
||||
"""Test websocket connection when config entry is unloaded."""
|
||||
await knx.setup_integration({})
|
||||
await knx.setup_integration()
|
||||
await hass.config_entries.async_unload(knx.mock_config_entry.entry_id)
|
||||
client = await hass_ws_client(hass)
|
||||
|
||||
|
|
Loading…
Reference in New Issue