go/pkg/plugin/manifest_test.go
Claude 01d9aa1b73
refactor: rename module from github.com/host-uk/core to forge.lthn.ai/core/cli
Move module identity to our own Forgejo instance. All import paths
updated across 434 Go files, sub-module go.mod files, and go.work.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:30:41 +00:00

109 lines
2.7 KiB
Go

package plugin
import (
"testing"
"forge.lthn.ai/core/cli/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")
}