forked from retoor/devplacepy
Update
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
|
||||
import asyncio
|
||||
|
||||
from tests.conftest import run_async
|
||||
from devplacepy.services.devii.interaction.broker import InteractionBroker
|
||||
|
||||
|
||||
def test_broker_site_prompt_returns_submitted_values():
|
||||
async def wait_site(interaction_id, frame, timeout):
|
||||
assert frame["title"] == "Deploy?"
|
||||
assert frame["widgets"][0]["type"] == "confirm"
|
||||
return {
|
||||
"status": "submitted",
|
||||
"interaction_id": interaction_id,
|
||||
"values": {"delete": True},
|
||||
}
|
||||
|
||||
broker = InteractionBroker("main", wait_site=wait_site)
|
||||
|
||||
async def run():
|
||||
return await broker.prompt(
|
||||
{
|
||||
"title": "Deploy?",
|
||||
"widgets": [
|
||||
{
|
||||
"type": "confirm",
|
||||
"name": "delete",
|
||||
"label": "Delete",
|
||||
"default": False,
|
||||
}
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
result = run_async(run())
|
||||
assert result.status == "submitted"
|
||||
assert result.values == {"delete": True}
|
||||
assert result.meta["adapter"] == "site-chat"
|
||||
assert result.meta["degraded"] is False
|
||||
assert broker.open_id() is None
|
||||
|
||||
|
||||
def test_broker_plain_adapter_parses_reply():
|
||||
async def present_plain(menu: str) -> str:
|
||||
assert "yes" in menu.lower() or "Delete" in menu
|
||||
return "yes"
|
||||
|
||||
broker = InteractionBroker("cli", present_plain=present_plain)
|
||||
result = run_async(
|
||||
broker.prompt(
|
||||
{
|
||||
"title": "Delete?",
|
||||
"widgets": [
|
||||
{"type": "confirm", "name": "ok", "label": "OK", "default": False}
|
||||
],
|
||||
}
|
||||
)
|
||||
)
|
||||
assert result.status == "submitted"
|
||||
assert result.values == {"ok": True}
|
||||
assert result.meta["degraded"] is True
|
||||
|
||||
|
||||
def test_broker_invalid_args_raise():
|
||||
from devplacepy.services.devii.errors import ToolInputError
|
||||
|
||||
broker = InteractionBroker("main")
|
||||
try:
|
||||
run_async(broker.prompt({"title": "x", "widgets": []}))
|
||||
assert False, "expected ToolInputError"
|
||||
except ToolInputError:
|
||||
pass
|
||||
|
||||
|
||||
def test_broker_timeout_status():
|
||||
async def wait_site(interaction_id, frame, timeout):
|
||||
raise asyncio.TimeoutError()
|
||||
|
||||
broker = InteractionBroker("main", wait_site=wait_site)
|
||||
result = run_async(
|
||||
broker.prompt(
|
||||
{
|
||||
"title": "T?",
|
||||
"timeout_sec": 1,
|
||||
"widgets": [
|
||||
{"type": "confirm", "name": "ok", "label": "OK"}
|
||||
],
|
||||
}
|
||||
)
|
||||
)
|
||||
assert result.status == "timeout"
|
||||
assert result.values == {}
|
||||
Reference in New Issue
Block a user