Implement approved specification #32 and tickets #33-#37. Keep host authentication server-verified and pin session interaction language. Compile scoped base selectors for browser compatibility and retain full gutters during CSS pruning.
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 does not close/.test(n.message)));
|
|
});
|