52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
const test = require("node:test");
|
|
const assert = require("node:assert/strict");
|
|
const { mapToAppRequest, normalizeHeaders, createMutationPersister } = require("../src/server");
|
|
|
|
test("normalizeHeaders lowercases and joins array values", () => {
|
|
const headers = normalizeHeaders({
|
|
"X-User-Id": "u1",
|
|
"X-Forwarded-For": ["a", "b"],
|
|
});
|
|
|
|
assert.equal(headers["x-user-id"], "u1");
|
|
assert.equal(headers["x-forwarded-for"], "a,b");
|
|
});
|
|
|
|
test("mapToAppRequest extracts method/path/headers/body correctly", () => {
|
|
const request = mapToAppRequest({
|
|
req: {
|
|
method: "POST",
|
|
url: "/api/webhooks/x?debug=1&returnTo=%2Faudio%2F1",
|
|
headers: { "X-Signature": "sha256=abc" },
|
|
},
|
|
rawBody: "{\"ok\":true}",
|
|
});
|
|
|
|
assert.equal(request.method, "POST");
|
|
assert.equal(request.path, "/api/webhooks/x");
|
|
assert.equal(request.query.debug, "1");
|
|
assert.equal(request.query.returnTo, "/audio/1");
|
|
assert.equal(request.headers["x-signature"], "sha256=abc");
|
|
assert.equal(request.rawBody, "{\"ok\":true}");
|
|
});
|
|
|
|
test("createMutationPersister writes sequentially and flush waits", async () => {
|
|
const saved = [];
|
|
const stateStore = {
|
|
async save(state) {
|
|
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
saved.push(state.id);
|
|
},
|
|
};
|
|
|
|
const persister = createMutationPersister({ stateStore, logger: { error() {} } });
|
|
|
|
persister.enqueue({ id: "s1" });
|
|
persister.enqueue({ id: "s2" });
|
|
await persister.flush();
|
|
|
|
assert.deepEqual(saved, ["s1", "s2"]);
|
|
});
|