← Files Biological Sequence & Alignment ViewerARCHIVED FILE

src/views/workspace-tracks.test.ts

2.18 KB · Sep 30, 2026 · 23:01 UTC

↓ Download file

import { randomUUID } from "node:crypto";

import { describe, expect, it, vi } from "vitest";

import {
  SEQUENCE_LIST_WORKSPACE_TRACK_DIRECTORY_TOOL_NAME,
  SEQUENCE_LOAD_WORKSPACE_TRACK_TOOL_NAME,
} from "../workspace-track-protocol";
import { createSequenceWorkspaceTrackBrowserClient } from "./workspace-tracks";

describe("workspace track browser client", () => {
  it("retries read-only listings with opaque bounded requests", async () => {
    const sessionId = randomUUID();
    const directoryCandidateId = randomUUID();
    const callServerTool = vi
      .fn()
      .mockRejectedValueOnce(new Error("transport disconnected"))
      .mockResolvedValue({
        structuredContent: {
          breadcrumbs: [
            {
              candidateId: directoryCandidateId,
              label: "Workspace",
              workspacePath: ".",
            },
          ],
          directory: {
            candidateId: directoryCandidateId,
            label: "Workspace",
            workspacePath: ".",
          },
          entries: [],
          omittedEntries: 0,
        },
      });
    const browser = createSequenceWorkspaceTrackBrowserClient(
      { callServerTool } as never,
      sessionId,
    );
    await expect(
      browser.listDirectory({ directoryCandidateId, limit: 10 }),
    ).resolves.toMatchObject({ entries: [] });
    expect(callServerTool).toHaveBeenCalledTimes(2);
    expect(callServerTool).toHaveBeenLastCalledWith({
      arguments: { directoryCandidateId, limit: 10, sessionId },
      name: SEQUENCE_LIST_WORKSPACE_TRACK_DIRECTORY_TOOL_NAME,
    });
  });

  it("never replays a mutating load after an uncertain failure", async () => {
    const callServerTool = vi.fn(async () => {
      throw new Error("network timeout");
    });
    const browser = createSequenceWorkspaceTrackBrowserClient(
      { callServerTool } as never,
      randomUUID(),
    );
    await expect(
      browser.loadBundle({ bundleId: randomUUID() }),
    ).rejects.toThrow("network timeout");
    expect(callServerTool).toHaveBeenCalledOnce();
    expect(callServerTool).toHaveBeenCalledWith(
      expect.objectContaining({
        name: SEQUENCE_LOAD_WORKSPACE_TRACK_TOOL_NAME,
      }),
    );
  });
});

SHA-256: c1f7e67e8ea3a973e84e9191569a430fe51f7bbbe507eb605f86b06823856e5e