///
import { describe, expect, it } from "bun:test"
import { prependResolvedOpencodeBinToPath } from "./opencode-bin-path"
describe("prependResolvedOpencodeBinToPath", () => {
it("prepends resolved opencode-ai bin path to PATH", () => {
//#given
const env: Record = {
PATH: "/Users/yeongyu/node_modules/.bin:/usr/bin",
}
const resolver = () => "/tmp/bunx-123/node_modules/opencode-ai/bin/opencode"
const pathExists = () => true
//#when
prependResolvedOpencodeBinToPath(env, resolver, pathExists)
//#then
expect(env.PATH).toBe(
"/tmp/bunx-123/node_modules/opencode-ai/bin:/Users/yeongyu/node_modules/.bin:/usr/bin",
)
})
it("does not duplicate an existing opencode-ai bin path", () => {
//#given
const env: Record = {
PATH: "/tmp/bunx-123/node_modules/opencode-ai/bin:/usr/bin",
}
const resolver = () => "/tmp/bunx-123/node_modules/opencode-ai/bin/opencode"
const pathExists = () => true
//#when
prependResolvedOpencodeBinToPath(env, resolver, pathExists)
//#then
expect(env.PATH).toBe("/tmp/bunx-123/node_modules/opencode-ai/bin:/usr/bin")
})
it("keeps PATH unchanged when opencode-ai cannot be resolved", () => {
//#given
const env: Record = {
PATH: "/Users/yeongyu/node_modules/.bin:/usr/bin",
}
const resolver = () => {
throw new Error("module not found")
}
//#when
prependResolvedOpencodeBinToPath(env, resolver)
//#then
expect(env.PATH).toBe("/Users/yeongyu/node_modules/.bin:/usr/bin")
})
it("keeps PATH unchanged when resolved binary path does not exist", () => {
//#given
const env: Record = {
PATH: "/Users/yeongyu/node_modules/.bin:/usr/bin",
}
const resolver = () => "/Users/yeongyu/node_modules/opencode-ai/bin/opencode"
const pathExists = () => false
//#when
prependResolvedOpencodeBinToPath(env, resolver, pathExists)
//#then
expect(env.PATH).toBe("/Users/yeongyu/node_modules/.bin:/usr/bin")
})
})