1import { EnvironmentId, ThreadId } from "@t3tools/contracts";
2import { describe, expect, it } from "vite-plus/test";
3
4import { isCurrentPreviewRuntimeTab, previewRuntimeTabId } from "./previewRuntimeTabId";
5
6describe("previewRuntimeTabId", () => {
7 it("scopes process-local tab ids to their environment, thread, and server epoch", () => {
8 const base = {
9 environmentId: EnvironmentId.make("environment-a"),
10 threadId: ThreadId.make("thread-a"),
11 };
12
13 expect(previewRuntimeTabId(base, "epoch-a", "tab_1")).not.toBe(
14 previewRuntimeTabId(
15 { ...base, environmentId: EnvironmentId.make("environment-b") },
16 "epoch-a",
17 "tab_1",
18 ),
19 );
20 expect(previewRuntimeTabId(base, "epoch-a", "tab_1")).not.toBe(
21 previewRuntimeTabId({ ...base, threadId: ThreadId.make("thread-b") }, "epoch-a", "tab_1"),
22 );
23 expect(previewRuntimeTabId(base, "epoch-a", "tab_1")).not.toBe(
24 previewRuntimeTabId(base, "epoch-b", "tab_1"),
25 );
26 });
27
28 it("is stable for the same runtime tab", () => {
29 const ref = {
30 environmentId: EnvironmentId.make("environment-a"),
31 threadId: ThreadId.make("thread-a"),
32 };
33 expect(previewRuntimeTabId(ref, null, "tab_1")).toBe(previewRuntimeTabId(ref, null, "tab_1"));
34 });
35
36 it("rejects a pinned operation target after the server epoch changes", () => {
37 const ref = {
38 environmentId: EnvironmentId.make("environment-a"),
39 threadId: ThreadId.make("thread-a"),
40 };
41 const runtimeTabId = previewRuntimeTabId(ref, "epoch-a", "tab_1");
42
43 expect(isCurrentPreviewRuntimeTab(ref, "epoch-a", "tab_1", runtimeTabId)).toBe(true);
44 expect(isCurrentPreviewRuntimeTab(ref, "epoch-b", "tab_1", runtimeTabId)).toBe(false);
45 });
46});