Files
2026-07-13 13:00:08 +08:00

48 lines
1.4 KiB
Go

package cli
import (
"os"
"path/filepath"
"strings"
"testing"
"reasonix/internal/pluginpkg"
)
func TestPluginsSlashShowsInstalledPluginDetails(t *testing.T) {
home := t.TempDir()
t.Setenv("REASONIX_HOME", home)
root := filepath.Join(home, "plugins", "superpowers")
writePluginTestFile(t, filepath.Join(root, pluginpkg.CodexManifest), `{
"name": "superpowers",
"version": "6.1.0",
"description": "Planning workflows",
"skills": "skills"
}`)
writePluginTestFile(t, filepath.Join(root, "skills", "plan", "SKILL.md"), "---\ndescription: Plan work\n---\nbody")
if err := pluginpkg.Upsert(home, pluginpkg.InstalledPlugin{Name: "superpowers", Root: "plugins/superpowers", Version: "6.1.0", ManifestKind: "codex", Enabled: true}); err != nil {
t.Fatal(err)
}
m := newTestChatTUI()
if cmd := m.runSlashCommand("/plugins show superpowers"); cmd != nil {
t.Fatal("/plugins show should render locally")
}
out := strings.Join(m.transcript, "\n")
for _, want := range []string{"plugin superpowers [enabled]", "/superpowers:plan", "usage: enabled plugins load into new sessions"} {
if !strings.Contains(out, want) {
t.Fatalf("/plugins show output missing %q:\n%s", want, out)
}
}
}
func writePluginTestFile(t *testing.T, path, body string) {
t.Helper()
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(path, []byte(body), 0o644); err != nil {
t.Fatal(err)
}
}