75 lines
2.5 KiB
TypeScript
75 lines
2.5 KiB
TypeScript
import { afterEach, describe, expect, test } from "bun:test"
|
|
import os from "os"
|
|
import path from "path"
|
|
import { resolveOpenCodeWriteScope, resolveTargetOutputRoot } from "../src/utils/resolve-output"
|
|
|
|
const baseOptions = {
|
|
outputRoot: "/tmp/output",
|
|
codexHome: path.join(os.homedir(), ".codex"),
|
|
piHome: path.join(os.homedir(), ".pi", "agent"),
|
|
hasExplicitOutput: false,
|
|
}
|
|
|
|
describe("resolveTargetOutputRoot", () => {
|
|
test("codex returns codexHome", () => {
|
|
const result = resolveTargetOutputRoot({ ...baseOptions, targetName: "codex" })
|
|
expect(result).toBe(baseOptions.codexHome)
|
|
})
|
|
|
|
test("pi returns piHome", () => {
|
|
const result = resolveTargetOutputRoot({ ...baseOptions, targetName: "pi" })
|
|
expect(result).toBe(baseOptions.piHome)
|
|
})
|
|
|
|
test("opencode with explicit output returns outputRoot as-is", () => {
|
|
const result = resolveTargetOutputRoot({
|
|
...baseOptions,
|
|
hasExplicitOutput: true,
|
|
targetName: "opencode",
|
|
})
|
|
expect(result).toBe("/tmp/output")
|
|
})
|
|
|
|
describe("opencode without explicit output", () => {
|
|
const originalEnv = process.env.OPENCODE_CONFIG_DIR
|
|
|
|
afterEach(() => {
|
|
if (originalEnv === undefined) {
|
|
delete process.env.OPENCODE_CONFIG_DIR
|
|
} else {
|
|
process.env.OPENCODE_CONFIG_DIR = originalEnv
|
|
}
|
|
})
|
|
|
|
test("falls back to ~/.config/opencode when OPENCODE_CONFIG_DIR is unset", () => {
|
|
delete process.env.OPENCODE_CONFIG_DIR
|
|
const result = resolveTargetOutputRoot({ ...baseOptions, targetName: "opencode" })
|
|
expect(result).toBe(path.join(os.homedir(), ".config", "opencode"))
|
|
})
|
|
|
|
test("respects OPENCODE_CONFIG_DIR when set", () => {
|
|
process.env.OPENCODE_CONFIG_DIR = "/custom/opencode"
|
|
const result = resolveTargetOutputRoot({ ...baseOptions, targetName: "opencode" })
|
|
expect(result).toBe("/custom/opencode")
|
|
})
|
|
})
|
|
})
|
|
|
|
describe("resolveOpenCodeWriteScope", () => {
|
|
test("returns 'global' when no explicit output and no requested scope", () => {
|
|
expect(resolveOpenCodeWriteScope(false, undefined)).toBe("global")
|
|
})
|
|
|
|
test("returns undefined when explicit output is given and no requested scope", () => {
|
|
expect(resolveOpenCodeWriteScope(true, undefined)).toBeUndefined()
|
|
})
|
|
|
|
test("honors explicit requested scope even without explicit output", () => {
|
|
expect(resolveOpenCodeWriteScope(false, "workspace")).toBe("workspace")
|
|
})
|
|
|
|
test("honors explicit requested scope when explicit output is given", () => {
|
|
expect(resolveOpenCodeWriteScope(true, "global")).toBe("global")
|
|
})
|
|
})
|