import { MAX_SCRIPT_ID_LENGTH } from "@t3tools/contracts";import { shortcutLabelForCommand } from "./keybindings";import { describe, expect, it } from "vite-plus/test";import { projectScriptCwd, projectScriptRuntimeEnv, setupProjectScript,} from "@t3tools/shared/projectScripts"; import { buildProjectScript, commandForProjectScript, nextProjectScriptId, primaryProjectScript, projectScriptIdFromCommand,} from "./projectScripts"; describe("projectScripts helpers", () => { it("builds scripts with preview settings", () => { expect( buildProjectScript("dev", { name: "Dev server", command: "pnpm dev", icon: "debug", runOnWorktreeCreate: false, previewUrl: "http://localhost:5733", autoOpenPreview: true, }), ).toEqual({ id: "dev", name: "Dev server", command: "pnpm dev", icon: "debug", runOnWorktreeCreate: false, previewUrl: "http://localhost:5733", autoOpenPreview: true, }); }); it("omits preview settings when no preview URL is configured", () => { expect( buildProjectScript("test", { name: "Test", command: "pnpm test", icon: "test", runOnWorktreeCreate: false, previewUrl: null, autoOpenPreview: false, }), ).toEqual({ id: "test", name: "Test", command: "pnpm test", icon: "test", runOnWorktreeCreate: false, }); }); it("builds and parses script run commands", () => { const command = commandForProjectScript("lint"); expect(command).toBe("script.lint.run"); expect(projectScriptIdFromCommand(command ?? "")).toBe("lint"); expect(projectScriptIdFromCommand("terminal.toggle")).toBeNull(); }); it.each(["install-javascript-dependencies", "A", "a.b", "a b", "-a", "", "a".repeat(25)])( "omits the shortcut for legacy script ID %j without crashing script menus", (id) => { const commands = ["lint", id, "test"].map(commandForProjectScript); expect(commands).toEqual(["script.lint.run", null, "script.test.run"]); expect(commands.map((command) => shortcutLabelForCommand([], command))).toEqual([ null, null, null, ]); }, ); it("preserves the exact ID at the shortcut length limit", () => { const id = "a".repeat(MAX_SCRIPT_ID_LENGTH); expect(projectScriptIdFromCommand(commandForProjectScript(id) ?? "")).toBe(id); }); it("slugifies and dedupes project script ids", () => { expect(nextProjectScriptId("Run Tests", [])).toBe("run-tests"); expect(nextProjectScriptId("Run Tests", ["run-tests"])).toBe("run-tests-2"); expect(nextProjectScriptId("!!!", [])).toBe("script"); }); it("resolves primary and setup scripts", () => { const scripts = [ { id: "setup", name: "Setup", command: "bun install", icon: "configure" as const, runOnWorktreeCreate: true, }, { id: "test", name: "Test", command: "bun test", icon: "test" as const, runOnWorktreeCreate: false, }, ]; expect(primaryProjectScript(scripts)?.id).toBe("test"); expect(setupProjectScript(scripts)?.id).toBe("setup"); }); it("builds default runtime env for scripts", () => { const env = projectScriptRuntimeEnv({ project: { cwd: "/repo" }, worktreePath: "/repo/worktree-a", }); expect(env).toMatchObject({ T3CODE_PROJECT_ROOT: "/repo", T3CODE_WORKTREE_PATH: "/repo/worktree-a", }); }); it("allows overriding runtime env values", () => { const env = projectScriptRuntimeEnv({ project: { cwd: "/repo" }, extraEnv: { T3CODE_PROJECT_ROOT: "/custom-root", CUSTOM_FLAG: "1", }, }); expect(env.T3CODE_PROJECT_ROOT).toBe("/custom-root"); expect(env.CUSTOM_FLAG).toBe("1"); expect(env.T3CODE_WORKTREE_PATH).toBeUndefined(); }); it("prefers the worktree path for script cwd resolution", () => { expect( projectScriptCwd({ project: { cwd: "/repo" }, worktreePath: "/repo/worktree-a", }), ).toBe("/repo/worktree-a"); expect( projectScriptCwd({ project: { cwd: "/repo" }, worktreePath: null, }), ).toBe("/repo"); });});
import { MAX_SCRIPT_ID_LENGTH } from "@t3tools/contracts";
import { shortcutLabelForCommand } from "./keybindings";
import { describe, expect, it } from "vite-plus/test";
import {
projectScriptCwd,
projectScriptRuntimeEnv,
setupProjectScript,
} from "@t3tools/shared/projectScripts";
import {
buildProjectScript,
commandForProjectScript,
nextProjectScriptId,
primaryProjectScript,
projectScriptIdFromCommand,
} from "./projectScripts";
describe("projectScripts helpers", () => {
it("builds scripts with preview settings", () => {
expect(
buildProjectScript("dev", {
name: "Dev server",
command: "pnpm dev",
icon: "debug",
runOnWorktreeCreate: false,
previewUrl: "http://localhost:5733",
autoOpenPreview: true,
}),
).toEqual({
id: "dev",
name: "Dev server",
command: "pnpm dev",
icon: "debug",
runOnWorktreeCreate: false,
previewUrl: "http://localhost:5733",
autoOpenPreview: true,
});
});
it("omits preview settings when no preview URL is configured", () => {
expect(
buildProjectScript("test", {
name: "Test",
command: "pnpm test",
icon: "test",
runOnWorktreeCreate: false,
previewUrl: null,
autoOpenPreview: false,
}),
).toEqual({
id: "test",
name: "Test",
command: "pnpm test",
icon: "test",
runOnWorktreeCreate: false,
});
});
it("builds and parses script run commands", () => {
const command = commandForProjectScript("lint");
expect(command).toBe("script.lint.run");
expect(projectScriptIdFromCommand(command ?? "")).toBe("lint");
expect(projectScriptIdFromCommand("terminal.toggle")).toBeNull();
});
it.each(["install-javascript-dependencies", "A", "a.b", "a b", "-a", "", "a".repeat(25)])(
"omits the shortcut for legacy script ID %j without crashing script menus",
(id) => {
const commands = ["lint", id, "test"].map(commandForProjectScript);
expect(commands).toEqual(["script.lint.run", null, "script.test.run"]);
expect(commands.map((command) => shortcutLabelForCommand([], command))).toEqual([
null,
null,
null,
]);
},
);
it("preserves the exact ID at the shortcut length limit", () => {
const id = "a".repeat(MAX_SCRIPT_ID_LENGTH);
expect(projectScriptIdFromCommand(commandForProjectScript(id) ?? "")).toBe(id);
});
it("slugifies and dedupes project script ids", () => {
expect(nextProjectScriptId("Run Tests", [])).toBe("run-tests");
expect(nextProjectScriptId("Run Tests", ["run-tests"])).toBe("run-tests-2");
expect(nextProjectScriptId("!!!", [])).toBe("script");
});
it("resolves primary and setup scripts", () => {
const scripts = [
{
id: "setup",
name: "Setup",
command: "bun install",
icon: "configure" as const,
runOnWorktreeCreate: true,
},
{
id: "test",
name: "Test",
command: "bun test",
icon: "test" as const,
runOnWorktreeCreate: false,
},
];
expect(primaryProjectScript(scripts)?.id).toBe("test");
expect(setupProjectScript(scripts)?.id).toBe("setup");
});
it("builds default runtime env for scripts", () => {
const env = projectScriptRuntimeEnv({
project: { cwd: "/repo" },
worktreePath: "/repo/worktree-a",
});
expect(env).toMatchObject({
T3CODE_PROJECT_ROOT: "/repo",
T3CODE_WORKTREE_PATH: "/repo/worktree-a",
});
});
it("allows overriding runtime env values", () => {
const env = projectScriptRuntimeEnv({
project: { cwd: "/repo" },
extraEnv: {
T3CODE_PROJECT_ROOT: "/custom-root",
CUSTOM_FLAG: "1",
},
});
expect(env.T3CODE_PROJECT_ROOT).toBe("/custom-root");
expect(env.CUSTOM_FLAG).toBe("1");
expect(env.T3CODE_WORKTREE_PATH).toBeUndefined();
});
it("prefers the worktree path for script cwd resolution", () => {
expect(
projectScriptCwd({
project: { cwd: "/repo" },
worktreePath: "/repo/worktree-a",
}),
).toBe("/repo/worktree-a");
expect(
projectScriptCwd({
project: { cwd: "/repo" },
worktreePath: null,
}),
).toBe("/repo");
});
});