Files
oh-my-opencode/src/shared/host-skill-config.test.ts
T
YeonGyu-Kim 043e84be56 fix: add adaptHostSkillConfig utility for host config.skills.paths
Converts the host OpenCode config.skills object (with paths/urls arrays set by other plugins like superpowers) into the SkillsConfig format used by discoverConfigSourceSkills. Filters blank/whitespace entries and non-string values.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-18 13:43:08 +09:00

81 lines
2.2 KiB
TypeScript

import { describe, expect, test } from "bun:test"
import { adaptHostSkillConfig } from "./host-skill-config"
describe("adaptHostSkillConfig", () => {
test("converts paths and urls into SkillsConfig sources", () => {
// given
const hostConfig = {
paths: ["/host/skills", "/other/skills"],
urls: ["https://example.com/skills/"],
}
// when
const result = adaptHostSkillConfig(hostConfig)
// then
expect(result).toEqual({
sources: ["/host/skills", "/other/skills", "https://example.com/skills/"],
})
})
test("filters blank and whitespace-only entries", () => {
// given
const hostConfig = {
paths: ["", " ", "/real/skills"],
urls: ["\n", "https://example.com/skills/"],
}
// when
const result = adaptHostSkillConfig(hostConfig)
// then
expect(result).toEqual({
sources: ["/real/skills", "https://example.com/skills/"],
})
})
test("returns undefined when no usable sources remain", () => {
// when
const result = adaptHostSkillConfig({ paths: ["", " "], urls: ["\t"] })
// then
expect(result).toBeUndefined()
})
test("returns undefined for null input", () => {
expect(adaptHostSkillConfig(null)).toBeUndefined()
})
test("returns undefined for undefined input", () => {
expect(adaptHostSkillConfig(undefined)).toBeUndefined()
})
test("returns undefined for non-object input", () => {
expect(adaptHostSkillConfig("string")).toBeUndefined()
})
test("handles missing paths or urls gracefully", () => {
// when - only paths
const pathsOnly = adaptHostSkillConfig({ paths: ["/skills"] })
expect(pathsOnly).toEqual({ sources: ["/skills"] })
// when - only urls
const urlsOnly = adaptHostSkillConfig({ urls: ["https://example.com/skills/"] })
expect(urlsOnly).toEqual({ sources: ["https://example.com/skills/"] })
})
test("ignores non-string array elements", () => {
// given
const hostConfig = {
paths: ["/valid", 42, null, true, "/also-valid"],
}
// when
const result = adaptHostSkillConfig(hostConfig)
// then
expect(result).toEqual({ sources: ["/valid", "/also-valid"] })
})
})