Add subscription for Z-Wave JS node re-interview status (#49024)
* Add subscription for interview status * update test * forward stage completed event * add additional test * additional tests * return earlierpull/49534/head
parent
5c6744d978
commit
cad281b326
|
@ -367,14 +367,43 @@ async def websocket_refresh_node_info(
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Re-interview a node."""
|
"""Re-interview a node."""
|
||||||
node_id = msg[NODE_ID]
|
node_id = msg[NODE_ID]
|
||||||
node = client.driver.controller.nodes.get(node_id)
|
controller = client.driver.controller
|
||||||
|
node = controller.nodes.get(node_id)
|
||||||
|
|
||||||
if node is None:
|
if node is None:
|
||||||
connection.send_error(msg[ID], ERR_NOT_FOUND, f"Node {node_id} not found")
|
connection.send_error(msg[ID], ERR_NOT_FOUND, f"Node {node_id} not found")
|
||||||
return
|
return
|
||||||
|
|
||||||
await node.async_refresh_info()
|
@callback
|
||||||
connection.send_result(msg[ID])
|
def async_cleanup() -> None:
|
||||||
|
"""Remove signal listeners."""
|
||||||
|
for unsub in unsubs:
|
||||||
|
unsub()
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def forward_event(event: dict) -> None:
|
||||||
|
connection.send_message(
|
||||||
|
websocket_api.event_message(msg[ID], {"event": event["event"]})
|
||||||
|
)
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def forward_stage(event: dict) -> None:
|
||||||
|
connection.send_message(
|
||||||
|
websocket_api.event_message(
|
||||||
|
msg[ID], {"event": event["event"], "stage": event["stageName"]}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
connection.subscriptions[msg["id"]] = async_cleanup
|
||||||
|
unsubs = [
|
||||||
|
node.on("interview started", forward_event),
|
||||||
|
node.on("interview completed", forward_event),
|
||||||
|
node.on("interview stage completed", forward_stage),
|
||||||
|
node.on("interview failed", forward_event),
|
||||||
|
]
|
||||||
|
|
||||||
|
result = await node.async_refresh_info()
|
||||||
|
connection.send_result(msg[ID], result)
|
||||||
|
|
||||||
|
|
||||||
@websocket_api.require_admin # type:ignore
|
@websocket_api.require_admin # type:ignore
|
||||||
|
|
|
@ -250,6 +250,48 @@ async def test_refresh_node_info(
|
||||||
assert args["command"] == "node.refresh_info"
|
assert args["command"] == "node.refresh_info"
|
||||||
assert args["nodeId"] == 52
|
assert args["nodeId"] == 52
|
||||||
|
|
||||||
|
event = Event(
|
||||||
|
type="interview started",
|
||||||
|
data={"source": "node", "event": "interview started", "nodeId": 52},
|
||||||
|
)
|
||||||
|
client.driver.receive_event(event)
|
||||||
|
|
||||||
|
msg = await ws_client.receive_json()
|
||||||
|
assert msg["event"]["event"] == "interview started"
|
||||||
|
|
||||||
|
event = Event(
|
||||||
|
type="interview stage completed",
|
||||||
|
data={
|
||||||
|
"source": "node",
|
||||||
|
"event": "interview stage completed",
|
||||||
|
"stageName": "NodeInfo",
|
||||||
|
"nodeId": 52,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
client.driver.receive_event(event)
|
||||||
|
|
||||||
|
msg = await ws_client.receive_json()
|
||||||
|
assert msg["event"]["event"] == "interview stage completed"
|
||||||
|
assert msg["event"]["stage"] == "NodeInfo"
|
||||||
|
|
||||||
|
event = Event(
|
||||||
|
type="interview completed",
|
||||||
|
data={"source": "node", "event": "interview completed", "nodeId": 52},
|
||||||
|
)
|
||||||
|
client.driver.receive_event(event)
|
||||||
|
|
||||||
|
msg = await ws_client.receive_json()
|
||||||
|
assert msg["event"]["event"] == "interview completed"
|
||||||
|
|
||||||
|
event = Event(
|
||||||
|
type="interview failed",
|
||||||
|
data={"source": "node", "event": "interview failed", "nodeId": 52},
|
||||||
|
)
|
||||||
|
client.driver.receive_event(event)
|
||||||
|
|
||||||
|
msg = await ws_client.receive_json()
|
||||||
|
assert msg["event"]["event"] == "interview failed"
|
||||||
|
|
||||||
client.async_send_command_no_wait.reset_mock()
|
client.async_send_command_no_wait.reset_mock()
|
||||||
|
|
||||||
await ws_client.send_json(
|
await ws_client.send_json(
|
||||||
|
|
Loading…
Reference in New Issue