# retoor <retoor@molodetz.nl>
import json
from tests.conftest import run_async
from devplacepy.services.devii.interaction.broker import InteractionBroker
from devplacepy.services.devii.interaction.controller import InteractionController
def test_ui_prompt_dispatch():
async def wait_site(interaction_id, frame, timeout):
return {
"status": "submitted",
"interaction_id": interaction_id,
"values": {"env": "staging"},
}
broker = InteractionBroker("main", wait_site=wait_site)
controller = InteractionController(broker)
raw = run_async(
controller.dispatch(
"ui_prompt",
{
"title": "Env?",
"widgets": [
{
"type": "choice",
"name": "env",
"label": "Env",
"options": [
{"value": "staging", "label": "Staging"},
{"value": "prod", "label": "Prod"},
],
}
],
},
)
)
data = json.loads(raw)
assert data["status"] == "submitted"
assert data["values"]["env"] == "staging"
def test_ui_notify_on_site():
events = []
async def emit(payload):
events.append(payload)
broker = InteractionBroker("main", emit=emit)
controller = InteractionController(broker)
raw = run_async(controller.dispatch("ui_notify", {"text": "Working..."}))
data = json.loads(raw)
assert data["status"] == "ok"
assert events and events[0]["type"] == "status"