test(claude-code-plugin-loader): cover plugin path nullish resolution
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,55 @@
|
|||||||
|
import { describe, expect, test } from "bun:test"
|
||||||
|
|
||||||
|
import { resolvePluginPath, resolvePluginPaths } from "./plugin-path-resolver"
|
||||||
|
|
||||||
|
describe("resolvePluginPath", () => {
|
||||||
|
test("#given a plugin root placeholder #when resolving the path #then it replaces the placeholder", () => {
|
||||||
|
// given
|
||||||
|
const path = "${CLAUDE_PLUGIN_ROOT}/dist/index.js"
|
||||||
|
|
||||||
|
// when
|
||||||
|
const result = resolvePluginPath(path, "/tmp/plugin-root")
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(result).toBe("/tmp/plugin-root/dist/index.js")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("resolvePluginPaths", () => {
|
||||||
|
test("#given a nested object #when resolving paths #then it rewrites every nested string path", () => {
|
||||||
|
// given
|
||||||
|
const value = {
|
||||||
|
command: "node",
|
||||||
|
args: ["${CLAUDE_PLUGIN_ROOT}/server.js"],
|
||||||
|
nested: {
|
||||||
|
config: "${CLAUDE_PLUGIN_ROOT}/config.json",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// when
|
||||||
|
const result = resolvePluginPaths(value, "/tmp/plugin-root")
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(result).toEqual({
|
||||||
|
command: "node",
|
||||||
|
args: ["/tmp/plugin-root/server.js"],
|
||||||
|
nested: {
|
||||||
|
config: "/tmp/plugin-root/config.json",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test("#given nullish input #when resolving paths #then it returns the same nullish value", () => {
|
||||||
|
// given
|
||||||
|
const nullValue = null
|
||||||
|
const undefinedValue = undefined
|
||||||
|
|
||||||
|
// when
|
||||||
|
const nullResult = resolvePluginPaths(nullValue, "/tmp/plugin-root")
|
||||||
|
const undefinedResult = resolvePluginPaths(undefinedValue, "/tmp/plugin-root")
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(nullResult).toBeNull()
|
||||||
|
expect(undefinedResult).toBeUndefined()
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -5,7 +5,7 @@ export function resolvePluginPath(path: string, pluginRoot: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function resolvePluginPaths<T>(obj: T, pluginRoot: string): T {
|
export function resolvePluginPaths<T>(obj: T, pluginRoot: string): T {
|
||||||
if (obj === null || obj === undefined) return obj
|
if (obj == null) return obj
|
||||||
if (typeof obj === "string") {
|
if (typeof obj === "string") {
|
||||||
return resolvePluginPath(obj, pluginRoot) as T
|
return resolvePluginPath(obj, pluginRoot) as T
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user