mcp-framework/cmd/mcp-framework/main_test.go

104 lines
2.7 KiB
Go

package main
import (
"bytes"
"os"
"path/filepath"
"strings"
"testing"
)
func TestRunPrintsGlobalHelp(t *testing.T) {
var stdout bytes.Buffer
var stderr bytes.Buffer
if err := run(nil, &stdout, &stderr); err != nil {
t.Fatalf("run returned error: %v", err)
}
output := stdout.String()
if !strings.Contains(output, "mcp-framework <command>") {
t.Fatalf("global help should mention command usage: %q", output)
}
if !strings.Contains(output, "scaffold init") {
t.Fatalf("global help should mention scaffold init: %q", output)
}
}
func TestRunScaffoldInitCreatesProject(t *testing.T) {
target := filepath.Join(t.TempDir(), "demo-mcp")
args := []string{
"scaffold", "init",
"--target", target,
"--module", "example.com/demo-mcp",
"--binary", "demo-mcp",
"--profiles", "dev,prod",
}
var stdout bytes.Buffer
var stderr bytes.Buffer
if err := run(args, &stdout, &stderr); err != nil {
t.Fatalf("run returned error: %v", err)
}
if _, err := os.Stat(filepath.Join(target, "cmd", "demo-mcp", "main.go")); err != nil {
t.Fatalf("generated main.go missing: %v", err)
}
if _, err := os.Stat(filepath.Join(target, "internal", "app", "app.go")); err != nil {
t.Fatalf("generated app.go missing: %v", err)
}
if _, err := os.Stat(filepath.Join(target, "mcp.toml")); err != nil {
t.Fatalf("generated mcp.toml missing: %v", err)
}
if _, err := os.Stat(filepath.Join(target, "install.sh")); err != nil {
t.Fatalf("generated install.sh missing: %v", err)
}
if !strings.Contains(stdout.String(), "Scaffold generated in") {
t.Fatalf("stdout should include generation summary: %q", stdout.String())
}
}
func TestRunScaffoldInitRequiresTarget(t *testing.T) {
var stdout bytes.Buffer
var stderr bytes.Buffer
err := run([]string{"scaffold", "init"}, &stdout, &stderr)
if err == nil {
t.Fatal("expected error")
}
if !strings.Contains(err.Error(), "--target is required") {
t.Fatalf("error = %v", err)
}
}
func TestRunUnknownCommandReturnsError(t *testing.T) {
var stdout bytes.Buffer
var stderr bytes.Buffer
err := run([]string{"boom"}, &stdout, &stderr)
if err == nil {
t.Fatal("expected error")
}
if !strings.Contains(err.Error(), "unknown command") {
t.Fatalf("error = %v", err)
}
}
func TestScaffoldInitHelp(t *testing.T) {
var stdout bytes.Buffer
var stderr bytes.Buffer
if err := run([]string{"scaffold", "init", "--help"}, &stdout, &stderr); err != nil {
t.Fatalf("run returned error: %v", err)
}
output := stdout.String()
if !strings.Contains(output, "--target") {
t.Fatalf("init help should mention --target: %q", output)
}
if !strings.Contains(output, "--overwrite") {
t.Fatalf("init help should mention --overwrite: %q", output)
}
}