40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { fakeUpstreamStream } from "../../helpers/fakeUpstreamStream.ts";
|
|
|
|
test("fakeUpstreamStream emits pushed chunks then closes", async () => {
|
|
const { stream, push, close } = fakeUpstreamStream();
|
|
push("a");
|
|
push("b");
|
|
close();
|
|
const reader = stream.getReader();
|
|
const dec = new TextDecoder();
|
|
let out = "";
|
|
for (;;) {
|
|
const { done, value } = await reader.read();
|
|
if (done) break;
|
|
out += dec.decode(value);
|
|
}
|
|
assert.equal(out, "ab");
|
|
});
|
|
|
|
test("fakeUpstreamStream signals cancel when consumer aborts", async () => {
|
|
const { stream, onCancel } = fakeUpstreamStream();
|
|
let cancelled = false;
|
|
onCancel(() => {
|
|
cancelled = true;
|
|
});
|
|
const reader = stream.getReader();
|
|
await reader.cancel("client-abort");
|
|
assert.equal(cancelled, true);
|
|
});
|
|
|
|
test("fakeUpstreamStream propagates error to reader", async () => {
|
|
const { stream, error } = fakeUpstreamStream();
|
|
error(new Error("upstream boom"));
|
|
const reader = stream.getReader();
|
|
await assert.rejects(async () => {
|
|
await reader.read();
|
|
}, /upstream boom/);
|
|
});
|