← Files Biological Sequence & Alignment ViewerARCHIVED FILE
src/workspace-track-protocol.test.ts
2.52 KB · Sep 30, 2026 · 23:01 UTC
import { randomUUID } from "node:crypto";
import { describe, expect, it } from "vitest";
import {
sequenceListWorkspaceTrackDirectoryResultSchema,
sequenceLoadWorkspaceTrackInputSchema,
sequenceResolveWorkspaceTrackBundleResultSchema,
} from "./workspace-track-protocol";
describe("workspace track protocol", () => {
it("accepts only bounded paired inclusive windows", () => {
const base = { bundleId: randomUUID(), sessionId: randomUUID() };
expect(
sequenceLoadWorkspaceTrackInputSchema.parse({
...base,
end: 100_000,
reference: "chr1",
start: 1,
}),
).toMatchObject({ start: 1, end: 100_000 });
expect(() =>
sequenceLoadWorkspaceTrackInputSchema.parse({ ...base, start: 1 }),
).toThrow(/both start and end/u);
expect(() =>
sequenceLoadWorkspaceTrackInputSchema.parse({
...base,
end: 100_001,
start: 1,
}),
).toThrow(/100,000/u);
});
it("rejects absolute, traversal, URL, and backslash metadata", () => {
const candidateId = randomUUID();
const base = {
candidateId,
format: "bed",
kind: "file",
label: "track.bed",
role: "annotation",
size: 10,
};
for (const workspacePath of [
"/tmp/track.bed",
"../track.bed",
"data/../track.bed",
"file:track.bed",
"data\\track.bed",
]) {
expect(() =>
sequenceListWorkspaceTrackDirectoryResultSchema.parse({
breadcrumbs: [
{
candidateId: randomUUID(),
label: "Workspace",
workspacePath: ".",
},
],
directory: {
candidateId: randomUUID(),
label: "Workspace",
workspacePath: ".",
},
entries: [{ ...base, workspacePath }],
omittedEntries: 0,
}),
).toThrow();
}
});
it("requires ready and bundle ID to agree", () => {
const primary = {
candidateId: randomUUID(),
format: "bed",
kind: "file",
label: "track.bed",
role: "annotation",
size: 10,
workspacePath: "data/track.bed",
};
expect(() =>
sequenceResolveWorkspaceTrackBundleResultSchema.parse({
primary,
ready: true,
requirements: [],
}),
).toThrow(/bundleId/u);
expect(() =>
sequenceResolveWorkspaceTrackBundleResultSchema.parse({
bundleId: randomUUID(),
primary,
ready: false,
requirements: [],
}),
).toThrow(/bundleId/u);
});
});
SHA-256: 605744def2ba43a98f493288a466287549f6f90ce9286657e5cb09075d455a1c