104 lines
2.7 KiB
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)
|
|
}
|
|
}
|