package cli import ( "bytes" "context" "strings" "testing" "email-mcp/internal/secretstore" ) func TestInteractiveConfigPrompterPromptCredentialCollectsValues(t *testing.T) { input := strings.NewReader("imap.example.com\nalice\nsecret\n") output := &bytes.Buffer{} prompter := NewInteractiveConfigPrompter(input, output) cred, err := prompter.PromptCredential(context.Background(), secretstore.Credential{}, false) if err != nil { t.Fatalf("PromptCredential returned error: %v", err) } if cred.Host != "imap.example.com" || cred.Username != "alice" || cred.Password != "secret" { t.Fatalf("unexpected credential: %#v", cred) } if got := output.String(); got != "IMAP host: Username: Password: " { t.Fatalf("unexpected prompts: %q", got) } } func TestInteractiveConfigPrompterPromptCredentialKeepsStoredPassword(t *testing.T) { input := strings.NewReader("imap.example.com\nalice\n\n") output := &bytes.Buffer{} prompter := NewInteractiveConfigPrompter(input, output) cred, err := prompter.PromptCredential(context.Background(), secretstore.Credential{ Host: "imap.example.com", Username: "alice", Password: "stored-secret", }, true) if err != nil { t.Fatalf("PromptCredential returned error: %v", err) } if cred.Password != "stored-secret" { t.Fatalf("expected stored password to be preserved, got %q", cred.Password) } if got := output.String(); !strings.Contains(got, "Password [stored, leave blank to keep]: ") { t.Fatalf("unexpected prompts: %q", got) } }