mcp-framework/manifest/manifest_test.go
2026-04-13 15:52:00 +02:00

116 lines
3 KiB
Go

package manifest
import (
"errors"
"os"
"path/filepath"
"testing"
)
func TestFindWalksParents(t *testing.T) {
root := t.TempDir()
manifestPath := filepath.Join(root, DefaultFile)
if err := os.WriteFile(manifestPath, []byte("[update]\n"), 0o600); err != nil {
t.Fatalf("WriteFile manifest: %v", err)
}
startDir := filepath.Join(root, "cmd", "graylog")
if err := os.MkdirAll(startDir, 0o755); err != nil {
t.Fatalf("MkdirAll startDir: %v", err)
}
got, err := Find(startDir)
if err != nil {
t.Fatalf("Find returned error: %v", err)
}
if got != manifestPath {
t.Fatalf("Find = %q, want %q", got, manifestPath)
}
}
func TestFindReturnsNotExistWhenMissing(t *testing.T) {
_, err := Find(t.TempDir())
if err == nil {
t.Fatal("expected error")
}
if !errors.Is(err, os.ErrNotExist) {
t.Fatalf("error = %v, want os.ErrNotExist", err)
}
}
func TestLoadParsesUpdateConfig(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, DefaultFile)
const content = `
[update]
source_name = " Gitea releases "
base_url = "https://gitea.example.com/"
latest_release_url = "https://gitea.example.com/api/releases/latest"
token_header = " Authorization "
token_env_names = [" GITEA_TOKEN ", "", "GITEA_RELEASE_TOKEN"]
`
if err := os.WriteFile(path, []byte(content), 0o600); err != nil {
t.Fatalf("WriteFile manifest: %v", err)
}
file, err := Load(path)
if err != nil {
t.Fatalf("Load returned error: %v", err)
}
source := file.Update.ReleaseSource()
if source.Name != "Gitea releases" {
t.Fatalf("source name = %q", source.Name)
}
if source.BaseURL != "https://gitea.example.com" {
t.Fatalf("base URL = %q", source.BaseURL)
}
if source.LatestReleaseURL != "https://gitea.example.com/api/releases/latest" {
t.Fatalf("latest release URL = %q", source.LatestReleaseURL)
}
if source.TokenHeader != "Authorization" {
t.Fatalf("token header = %q", source.TokenHeader)
}
if len(source.TokenEnvNames) != 2 {
t.Fatalf("token env names = %v", source.TokenEnvNames)
}
}
func TestLoadDefaultFindsManifest(t *testing.T) {
root := t.TempDir()
path := filepath.Join(root, DefaultFile)
if err := os.WriteFile(path, []byte("[update]\nlatest_release_url = \"https://example.com/latest\"\n"), 0o600); err != nil {
t.Fatalf("WriteFile manifest: %v", err)
}
startDir := filepath.Join(root, "cmd", "tool")
if err := os.MkdirAll(startDir, 0o755); err != nil {
t.Fatalf("MkdirAll startDir: %v", err)
}
file, gotPath, err := LoadDefault(startDir)
if err != nil {
t.Fatalf("LoadDefault returned error: %v", err)
}
if gotPath != path {
t.Fatalf("path = %q, want %q", gotPath, path)
}
if file.Update.LatestReleaseURL != "https://example.com/latest" {
t.Fatalf("latest release URL = %q", file.Update.LatestReleaseURL)
}
}
func TestLoadReturnsParseError(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, DefaultFile)
if err := os.WriteFile(path, []byte("[update\n"), 0o600); err != nil {
t.Fatalf("WriteFile manifest: %v", err)
}
_, err := Load(path)
if err == nil {
t.Fatal("expected error")
}
}