package cli import ( "bytes" "context" "strings" "testing" ) func TestInteractiveSetupPrompterPromptSetupCollectsCredential(t *testing.T) { input := strings.NewReader(" imap.example.com \n alice \n secret \n") output := &bytes.Buffer{} prompter := NewInteractiveSetupPrompter(input, output) cred, err := prompter.PromptSetup(context.Background()) if err != nil { t.Fatalf("PromptSetup 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 TestInteractiveSetupPrompterPromptSetupRejectsMissingFields(t *testing.T) { input := strings.NewReader("imap.example.com\nalice\n \n") prompter := NewInteractiveSetupPrompter(input, &bytes.Buffer{}) _, err := prompter.PromptSetup(context.Background()) if err == nil { t.Fatal("expected validation error") } if !strings.Contains(err.Error(), "password is required") { t.Fatalf("expected password validation error, got %v", err) } }