Files
opensquilla--opensquilla/tests/unit/cli/tui/test_opentui_messages_completion.py
2026-07-13 13:12:33 +08:00

72 lines
2.2 KiB
Python

from __future__ import annotations
import json
import pytest
from opensquilla.cli.tui.opentui.messages import (
CompletionCandidate,
HostCompletionRequest,
HostToPythonMessageError,
host_message_from_json,
python_message_to_json,
)
def test_host_completion_request_parses_required_fields() -> None:
assert host_message_from_json(
'{"type":"completion.request","kind":"file","query":"src/cli","request_id":42}'
) == HostCompletionRequest(kind="file", query="src/cli", request_id=42)
@pytest.mark.parametrize(
("raw", "message"),
[
('{"type":"completion.request","query":"x","request_id":1}', "completion.kind"),
('{"type":"completion.request","kind":"slash","request_id":1}', "completion.query"),
('{"type":"completion.request","kind":"slash","query":"x"}', "completion.request_id"),
],
)
def test_host_completion_request_rejects_missing_fields(raw: str, message: str) -> None:
with pytest.raises(HostToPythonMessageError, match=message):
host_message_from_json(raw)
@pytest.mark.parametrize(
("raw", "message"),
[
('{"type":"completion.request","kind":7,"query":"x","request_id":1}', "completion.kind"),
(
'{"type":"completion.request","kind":"slash","query":7,"request_id":1}',
"completion.query",
),
(
'{"type":"completion.request","kind":"slash","query":"x","request_id":"1"}',
"completion.request_id",
),
],
)
def test_host_completion_request_rejects_wrong_field_types(raw: str, message: str) -> None:
with pytest.raises(HostToPythonMessageError, match=message):
host_message_from_json(raw)
def test_completion_candidate_serializes_as_json_payload() -> None:
raw = python_message_to_json(
"completion.item",
CompletionCandidate(
label="/compact",
description="Compact older context.",
insert_text="/compact ",
category="command",
),
)
assert json.loads(raw) == {
"type": "completion.item",
"label": "/compact",
"description": "Compact older context.",
"insert_text": "/compact ",
"category": "command",
}