26 lines
1.3 KiB
JavaScript
26 lines
1.3 KiB
JavaScript
const test = require("node:test");
|
|
const assert = require("node:assert");
|
|
const { createFakePi } = require("./fake_pi_runtime.js");
|
|
const { emitAndWait } = require("../../tht-gate.js");
|
|
|
|
test("emitAndWait trasporta il descriptor come JSON nel title e ritorna la ui_response parsata", async () => {
|
|
const { ctx, enqueueUi } = createFakePi();
|
|
const descriptor = { id: "u1", widget: "select", options: [{ id: "a", label: "A" }] };
|
|
enqueueUi(JSON.stringify({ id: "u1", choices: ["a"] }));
|
|
const resp = await emitAndWait(ctx, descriptor);
|
|
assert.deepEqual(resp, { id: "u1", choices: ["a"] });
|
|
assert.equal(ctx.uiCalls[0].method, "input");
|
|
assert.equal(ctx.uiCalls[0].title, JSON.stringify(descriptor));
|
|
});
|
|
|
|
test("no-limbo: undefined (cancel) ri-presenta lo stesso widget", async () => {
|
|
const { ctx, enqueueUi } = createFakePi();
|
|
const descriptor = { id: "u1", widget: "select", options: [] };
|
|
enqueueUi(undefined); // 1° giro: cancel
|
|
enqueueUi(JSON.stringify({ id: "u1", choices: ["a"] })); // 2° giro: risposta valida
|
|
const resp = await emitAndWait(ctx, descriptor);
|
|
assert.deepEqual(resp, { id: "u1", choices: ["a"] });
|
|
assert.equal(ctx.uiCalls.length, 2); // ri-presentato una volta
|
|
assert.ok(ctx.notifications.some((n) => /Esc non chiude/.test(n.message)));
|
|
});
|