61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { coerceUploadData, normalizeFileUploadPayload } from "./fileTransfers";
|
|
|
|
function toBase64(bytes: Uint8Array): string {
|
|
let binary = "";
|
|
for (let i = 0; i < bytes.length; i += 1) {
|
|
binary += String.fromCharCode(bytes[i]);
|
|
}
|
|
return btoa(binary);
|
|
}
|
|
|
|
describe("fileTransfers", () => {
|
|
test("coerceUploadData handles Uint8Array", () => {
|
|
const input = new Uint8Array([1, 2, 3]);
|
|
const out = coerceUploadData(input);
|
|
expect(out).not.toBeNull();
|
|
expect(Array.from(out || [])).toEqual([1, 2, 3]);
|
|
});
|
|
|
|
test("coerceUploadData handles ArrayBuffer", () => {
|
|
const input = new Uint8Array([4, 5, 6]).buffer;
|
|
const out = coerceUploadData(input);
|
|
expect(out).not.toBeNull();
|
|
expect(Array.from(out || [])).toEqual([4, 5, 6]);
|
|
});
|
|
|
|
test("coerceUploadData handles base64 string", () => {
|
|
const bytes = new Uint8Array([7, 8, 9]);
|
|
const input = toBase64(bytes);
|
|
const out = coerceUploadData(input);
|
|
expect(out).not.toBeNull();
|
|
expect(Array.from(out || [])).toEqual([7, 8, 9]);
|
|
});
|
|
|
|
test("coerceUploadData rejects invalid data", () => {
|
|
expect(coerceUploadData(123)).toBeNull();
|
|
});
|
|
|
|
test("normalizeFileUploadPayload fills defaults", () => {
|
|
const payload = {
|
|
path: "/tmp/file.txt",
|
|
data: new Uint8Array([1, 2, 3]),
|
|
offset: 10,
|
|
total: 30,
|
|
transferId: "t-1",
|
|
};
|
|
const out = normalizeFileUploadPayload(payload);
|
|
expect(out).not.toBeNull();
|
|
expect(out?.path).toBe("/tmp/file.txt");
|
|
expect(out?.offset).toBe(10);
|
|
expect(out?.total).toBe(30);
|
|
expect(out?.transferId).toBe("t-1");
|
|
expect(Array.from(out?.data || [])).toEqual([1, 2, 3]);
|
|
});
|
|
|
|
test("normalizeFileUploadPayload rejects missing data", () => {
|
|
const out = normalizeFileUploadPayload({ path: "/tmp/file.txt" });
|
|
expect(out).toBeNull();
|
|
});
|
|
});
|