Files
shop-crm-agent/internal/command/init_test.go
T

61 lines
1.6 KiB
Go
Raw Normal View History

package command
import (
"bytes"
"encoding/json"
"io"
"strings"
"testing"
)
func TestInitCommandReadsTokenWithoutPrintingIt(t *testing.T) {
const token = "test-private-token"
var receivedToken string
cmd := newInitCommand(
func(value string) (string, error) {
receivedToken = value
return "/test/repository/.env", nil
},
func(input io.Reader, output io.Writer) (string, error) {
_, _ = io.WriteString(output, "credential prompt")
return token, nil
},
)
var stdout, stderr bytes.Buffer
cmd.SetOut(&stdout)
cmd.SetErr(&stderr)
if err := cmd.Execute(); err != nil {
t.Fatal(err)
}
if receivedToken != token {
t.Fatalf("initializer received token=%q", receivedToken)
}
if strings.Contains(stdout.String(), token) || strings.Contains(stderr.String(), token) {
t.Fatal("init output exposed the token")
}
result := initResult{}
if err := json.Unmarshal(stdout.Bytes(), &result); err != nil {
t.Fatalf("decode init result: %v", err)
}
if !result.Initialized || result.EnvFile != "/test/repository/.env" {
t.Fatalf("result = %#v", result)
}
}
func TestInitCommandDoesNotExposeForceFlag(t *testing.T) {
cmd := newInitCommand(func(string) (string, error) {
return "", nil
}, func(io.Reader, io.Writer) (string, error) {
return "token", nil
})
if cmd.Flags().Lookup("force") != nil {
t.Fatal("init still exposes the retired --force flag")
}
}
func TestInitTerminalReaderRejectsNonTTY(t *testing.T) {
if _, err := readTokenFromTerminal(bytes.NewBufferString("token\n"), io.Discard); err == nil || !strings.Contains(err.Error(), "交互式终端") {
t.Fatalf("error = %v", err)
}
}