Files
Multi-Hoster-Upload/tests/serialized-runner.test.js
T
Sucukdeluxe c4c7907686
CI / verify (push) Has been cancelled
feat: improve live update and upload feedback
Refresh release metadata immediately before downloading an update and keep automatic checks current while the app remains open.

Accept desktop file drops from the first renderer frame, preserve early and rapid drops until initialization completes, and show the live remaining upload size in the sidebar.

Add regression coverage for update freshness, startup drag-and-drop ordering, localization, and remaining-byte retry behavior. Bump the application to v2.1.25.
2026-08-20 10:40:58 +02:00

54 lines
2.0 KiB
JavaScript

const { describe, it } = require('node:test');
const assert = require('node:assert/strict');
describe('serialized runner', () => {
it('flush waits for an already running save and later work stays ordered', async () => {
const { createSerializedRunner } = require('../lib/serialized-runner');
let releaseFirst;
const calls = [];
const runner = createSerializedRunner(async (value) => {
calls.push(`start:${value}`);
if (value === 'first') await new Promise((resolve) => { releaseFirst = resolve; });
calls.push(`end:${value}`);
return value;
});
const first = runner.run('first');
await new Promise((resolve) => setImmediate(resolve));
const second = runner.run('second');
let flushed = false;
const flush = runner.flush().then(() => { flushed = true; });
await new Promise((resolve) => setImmediate(resolve));
assert.equal(flushed, false);
assert.deepEqual(calls, ['start:first']);
releaseFirst();
assert.equal(await first, 'first');
assert.equal(await second, 'second');
await flush;
assert.equal(flushed, true);
assert.deepEqual(calls, ['start:first', 'end:first', 'start:second', 'end:second']);
});
it('queues work before readiness and drains every task in arrival order', async () => {
const { createReadySerializedRunner } = require('../lib/serialized-runner');
const calls = [];
const runner = createReadySerializedRunner(async (value) => {
calls.push(value);
return value;
});
const first = runner.run('first');
const second = runner.run('second');
await new Promise((resolve) => setImmediate(resolve));
assert.equal(runner.isReady, false);
assert.deepEqual(calls, []);
assert.equal(runner.ready(), true);
assert.equal(runner.ready(), false);
assert.deepEqual(await Promise.all([first, second]), ['first', 'second']);
assert.deepEqual(calls, ['first', 'second']);
assert.equal(runner.isReady, true);
});
});