14 lines
1.1 KiB
JavaScript
14 lines
1.1 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { recoveryView, renderRecoveryPanel } from "./recovery-panel.mjs";
|
|
|
|
class Node { constructor(tag) { this.tagName = tag; this.children = []; this.textContent = ""; this.className = ""; this.listeners = {}; } append(...nodes) { this.children.push(...nodes); } addEventListener(type, callback) { this.listeners[type] = callback; } }
|
|
const document = { createElement: (tag) => new Node(tag) };
|
|
assert.deepEqual(recoveryView({ status: "blocked", blocked: [{ reason: "offline_resource_invalid" }] }).actions, ["retry", "abort"]);
|
|
assert.deepEqual(recoveryView({ status: "network_required" }).actions, ["retry_online"]);
|
|
let retry = 0; const panel = renderRecoveryPanel(document, { status: "blocked", blocked: [{ reason: "permission_denied" }] }, { retry: () => { retry += 1; }, abort: () => {} });
|
|
assert.equal(panel.children[1].textContent, "blocked: permission_denied");
|
|
assert.equal(panel.children[3].children.length, 2);
|
|
panel.children[3].children[0].listeners.click();
|
|
assert.equal(retry, 1);
|
|
console.log(`recovery_ux=passed actions=${panel.children[3].children.length} retry=${retry}`);
|