156 lines · 4.2 KB · TypeScript
RawDownload
import { describe, expect, it } from "vite-plus/test";import { scopeThreadRef } from "@t3tools/client-runtime/environment";import { ThreadId } from "@t3tools/contracts";import { DraftId } from "./composerDraftStore"; import {  buildDraftThreadRouteParams,  buildThreadRouteParams,  resolveActiveThreadRouteRef,  resolveThreadRouteRenderState,  resolveThreadRouteRef,  resolveThreadRouteTarget,} from "./threadRoutes"; describe("threadRoutes", () => {  it("builds canonical thread route params from a scoped ref", () => {    const ref = scopeThreadRef("env-1" as never, ThreadId.make("thread-1"));     expect(buildThreadRouteParams(ref)).toEqual({      environmentId: "env-1",      threadId: "thread-1",    });  });   it("resolves a scoped ref only when both params are present", () => {    expect(      resolveThreadRouteRef({        environmentId: "env-1",        threadId: "thread-1",      }),    ).toEqual({      environmentId: "env-1",      threadId: "thread-1",    });     expect(resolveThreadRouteRef({ environmentId: "env-1" })).toBeNull();    expect(resolveThreadRouteRef({ threadId: "thread-1" })).toBeNull();  });   it("builds canonical draft route params from a draft id", () => {    expect(buildDraftThreadRouteParams(DraftId.make("draft-1"))).toEqual({      draftId: "draft-1",    });  });   it("resolves draft and server route targets", () => {    expect(      resolveThreadRouteTarget({        environmentId: "env-1",        threadId: "thread-1",      }),    ).toEqual({      kind: "server",      threadRef: {        environmentId: "env-1",        threadId: "thread-1",      },    });     expect(      resolveThreadRouteTarget({        draftId: "draft-1",      }),    ).toEqual({      kind: "draft",      draftId: "draft-1",    });  });   it("resolves the backing thread while a draft route is being promoted", () => {    const target = resolveThreadRouteTarget({ draftId: "draft-1" });     expect(      resolveActiveThreadRouteRef(target, {        environmentId: "env-1" as never,        threadId: ThreadId.make("draft-thread"),        promotedTo: scopeThreadRef("env-2" as never, ThreadId.make("server-thread")),      }),    ).toEqual({      environmentId: "env-2",      threadId: "server-thread",    });  });   it("does not treat a draft's reserved thread ref as an active sidebar thread", () => {    const target = resolveThreadRouteTarget({ draftId: "draft-1" });     expect(      resolveActiveThreadRouteRef(target, {        environmentId: "env-1" as never,        threadId: ThreadId.make("draft-thread"),        promotedTo: null,      }),    ).toBeNull();  });   it("renders authoritative server-thread shells when bootstrap is complete", () => {    expect(      resolveThreadRouteRenderState({        bootstrapComplete: true,        serverThreadExists: true,        serverThreadDeleted: false,        draftThreadExists: false,      }),    ).toBe("ready");  });   it("renders server threads and local drafts when they are ready", () => {    expect(      resolveThreadRouteRenderState({        bootstrapComplete: true,        serverThreadExists: true,        serverThreadDeleted: false,        draftThreadExists: false,      }),    ).toBe("ready");    expect(      resolveThreadRouteRenderState({        bootstrapComplete: true,        serverThreadExists: false,        serverThreadDeleted: false,        draftThreadExists: true,      }),    ).toBe("ready");  });   it("distinguishes bootstrap loading from a missing thread", () => {    expect(      resolveThreadRouteRenderState({        bootstrapComplete: false,        serverThreadExists: false,        serverThreadDeleted: false,        draftThreadExists: false,      }),    ).toBe("loading");    expect(      resolveThreadRouteRenderState({        bootstrapComplete: true,        serverThreadExists: false,        serverThreadDeleted: false,        draftThreadExists: false,      }),    ).toBe("missing");  });   it("redirects deleted server threads", () => {    expect(      resolveThreadRouteRenderState({        bootstrapComplete: true,        serverThreadExists: true,        serverThreadDeleted: true,        draftThreadExists: false,      }),    ).toBe("missing");  });});