Template
88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolvePrefixFromFlag(t *testing.T) {
|
|
prefix, err := resolvePrefix(" demo-api ", strings.NewReader(""), &bytes.Buffer{})
|
|
if err != nil {
|
|
t.Fatalf("resolvePrefix() error = %v", err)
|
|
}
|
|
if prefix != "demo-api" {
|
|
t.Fatalf("resolvePrefix() = %q, want %q", prefix, "demo-api")
|
|
}
|
|
}
|
|
|
|
func TestInitializeEnvCreatesAndPreservesConfig(t *testing.T) {
|
|
dir := t.TempDir()
|
|
created, err := initializeEnv(dir)
|
|
if err != nil {
|
|
t.Fatalf("initializeEnv() error = %v", err)
|
|
}
|
|
if !created {
|
|
t.Fatal("initializeEnv() created = false, want true")
|
|
}
|
|
|
|
target := filepath.Join(dir, ".env")
|
|
want, err := deploymentAssets.ReadFile(".env.example")
|
|
if err != nil {
|
|
t.Fatalf("read embedded .env.example: %v", err)
|
|
}
|
|
got, err := os.ReadFile(target)
|
|
if err != nil {
|
|
t.Fatalf("read generated .env: %v", err)
|
|
}
|
|
if !bytes.Equal(got, want) {
|
|
t.Fatal("generated .env does not match embedded .env.example")
|
|
}
|
|
|
|
const custom = "SECRET=keep-me\n"
|
|
if err := os.WriteFile(target, []byte(custom), 0o600); err != nil {
|
|
t.Fatalf("write existing .env: %v", err)
|
|
}
|
|
created, err = initializeEnv(dir)
|
|
if err != nil {
|
|
t.Fatalf("second initializeEnv() error = %v", err)
|
|
}
|
|
if created {
|
|
t.Fatal("second initializeEnv() created = true, want false")
|
|
}
|
|
got, err = os.ReadFile(target)
|
|
if err != nil {
|
|
t.Fatalf("read preserved .env: %v", err)
|
|
}
|
|
if string(got) != custom {
|
|
t.Fatalf("existing .env was overwritten: got %q", got)
|
|
}
|
|
}
|
|
|
|
func TestResolvePrefixFromInput(t *testing.T) {
|
|
var output bytes.Buffer
|
|
prefix, err := resolvePrefix("", strings.NewReader("template_1\n"), &output)
|
|
if err != nil {
|
|
t.Fatalf("resolvePrefix() error = %v", err)
|
|
}
|
|
if prefix != "template_1" {
|
|
t.Fatalf("resolvePrefix() = %q, want %q", prefix, "template_1")
|
|
}
|
|
if !strings.Contains(output.String(), "请输入项目前缀") {
|
|
t.Fatalf("prompt = %q, want prefix prompt", output.String())
|
|
}
|
|
}
|
|
|
|
func TestResolvePrefixRejectsUnsafeValues(t *testing.T) {
|
|
values := []string{"", "-demo", "demo api", "demo;reboot", "项目"}
|
|
for _, value := range values {
|
|
t.Run(value, func(t *testing.T) {
|
|
if _, err := resolvePrefix(value, strings.NewReader(""), &bytes.Buffer{}); err == nil {
|
|
t.Fatalf("resolvePrefix(%q) succeeded, want error", value)
|
|
}
|
|
})
|
|
}
|
|
}
|