go/pkg/plugin/manifest_test.go
Snider adaa4131f9 refactor: strip to pure package library (#3)
- Fix remaining 187 pkg/ files referencing core/cli → core/go
- Move SDK library code from internal/cmd/sdk/ → pkg/sdk/ (new package)
- Create pkg/rag/helpers.go with convenience functions from internal/cmd/rag/
- Fix pkg/mcp/tools_rag.go to use pkg/rag instead of internal/cmd/rag
- Fix pkg/build/buildcmd/cmd_sdk.go and pkg/release/sdk.go to use pkg/sdk
- Remove all non-library content: main.go, internal/, cmd/, docker/,
  scripts/, tasks/, tools/, .core/, .forgejo/, .woodpecker/, Taskfile.yml
- Run go mod tidy to trim unused dependencies

core/go is now a pure Go package suite (library only).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Co-authored-by: Claude <developers@lethean.io>
Reviewed-on: #3
2026-02-16 14:23:45 +00:00

109 lines
2.7 KiB
Go

package plugin
import (
"testing"
"forge.lthn.ai/core/go/pkg/io"
"github.com/stretchr/testify/assert"
)
func TestLoadManifest_Good(t *testing.T) {
m := io.NewMockMedium()
m.Files["plugins/test/plugin.json"] = `{
"name": "test-plugin",
"version": "1.0.0",
"description": "A test plugin",
"author": "Test Author",
"entrypoint": "main.go",
"dependencies": ["dep-a", "dep-b"],
"min_version": "0.5.0"
}`
manifest, err := LoadManifest(m, "plugins/test/plugin.json")
assert.NoError(t, err)
assert.Equal(t, "test-plugin", manifest.Name)
assert.Equal(t, "1.0.0", manifest.Version)
assert.Equal(t, "A test plugin", manifest.Description)
assert.Equal(t, "Test Author", manifest.Author)
assert.Equal(t, "main.go", manifest.Entrypoint)
assert.Equal(t, []string{"dep-a", "dep-b"}, manifest.Dependencies)
assert.Equal(t, "0.5.0", manifest.MinVersion)
}
func TestLoadManifest_Good_MinimalFields(t *testing.T) {
m := io.NewMockMedium()
m.Files["plugin.json"] = `{
"name": "minimal",
"version": "0.1.0",
"entrypoint": "run.sh"
}`
manifest, err := LoadManifest(m, "plugin.json")
assert.NoError(t, err)
assert.Equal(t, "minimal", manifest.Name)
assert.Equal(t, "0.1.0", manifest.Version)
assert.Equal(t, "run.sh", manifest.Entrypoint)
assert.Empty(t, manifest.Dependencies)
assert.Empty(t, manifest.MinVersion)
}
func TestLoadManifest_Bad_FileNotFound(t *testing.T) {
m := io.NewMockMedium()
_, err := LoadManifest(m, "nonexistent/plugin.json")
assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to read manifest")
}
func TestLoadManifest_Bad_InvalidJSON(t *testing.T) {
m := io.NewMockMedium()
m.Files["plugin.json"] = `{invalid json}`
_, err := LoadManifest(m, "plugin.json")
assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to parse manifest JSON")
}
func TestManifest_Validate_Good(t *testing.T) {
manifest := &Manifest{
Name: "test-plugin",
Version: "1.0.0",
Entrypoint: "main.go",
}
err := manifest.Validate()
assert.NoError(t, err)
}
func TestManifest_Validate_Bad_MissingName(t *testing.T) {
manifest := &Manifest{
Version: "1.0.0",
Entrypoint: "main.go",
}
err := manifest.Validate()
assert.Error(t, err)
assert.Contains(t, err.Error(), "name is required")
}
func TestManifest_Validate_Bad_MissingVersion(t *testing.T) {
manifest := &Manifest{
Name: "test-plugin",
Entrypoint: "main.go",
}
err := manifest.Validate()
assert.Error(t, err)
assert.Contains(t, err.Error(), "version is required")
}
func TestManifest_Validate_Bad_MissingEntrypoint(t *testing.T) {
manifest := &Manifest{
Name: "test-plugin",
Version: "1.0.0",
}
err := manifest.Validate()
assert.Error(t, err)
assert.Contains(t, err.Error(), "entrypoint is required")
}