Files
coa-server-manager/tools/update-check-queue.test.mjs
T

33 lines
1.4 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import { updateCheckQueue } from "../src/lib/updateCheckQueue.ts";
test("duplicate checks share one result and foreground waits for background on the same server", async () => {
const check = updateCheckQueue();
let release;
let calls = 0;
const background = check("server", "background", () => { calls++; return new Promise(resolve => { release = resolve; }); });
assert.equal(check("server", "background", () => { throw Error("duplicate"); }), background);
const foreground = check("server", "foreground", async () => { calls++; return "full preview"; });
await Promise.resolve();
await Promise.resolve();
assert.equal(calls, 1);
release("background preview");
assert.equal(await background, "background preview");
assert.equal(await foreground, "full preview");
assert.equal(calls, 2);
});
test("one server's failure releases its queue and does not block other servers", async () => {
const check = updateCheckQueue();
let fail;
const first = check("one", "a", () => new Promise((_, reject) => { fail = reject; }));
const failed = assert.rejects(first, /offline/);
const next = check("one", "b", async () => "retry");
assert.equal(await check("two", "a", async () => "independent"), "independent");
fail(Error("offline"));
await failed;
assert.equal(await next, "retry");
assert.equal(await check("one", "a", async () => "recovered"), "recovered");
});