fix(a11y prompter): Select prompt respects defaults

This commit is contained in:
Kynan Ware 2025-05-06 14:49:09 -06:00
parent 9bc2c388da
commit 2ee68411a7
2 changed files with 30 additions and 1 deletions

View file

@ -5,6 +5,7 @@ package prompter_test
import (
"fmt"
"io"
"slices"
"strings"
"testing"
"time"
@ -54,6 +55,29 @@ func TestAccessiblePrompter(t *testing.T) {
assert.Equal(t, 0, selectValue)
})
t.Run("Select - blank input returns default value", func(t *testing.T) {
console := newTestVirtualTerminal(t)
p := newTestAccessiblePrompter(t, console)
dummyDefaultValue := "12345abcdefg"
options := []string{"1", "2", dummyDefaultValue}
go func() {
// Wait for prompt to appear
_, err := console.ExpectString("Input a number between 1 and 3:")
require.NoError(t, err)
// Just press enter to accept the default
_, err = console.SendLine("")
require.NoError(t, err)
}()
selectValue, err := p.Select("Select a number", dummyDefaultValue, options)
require.NoError(t, err)
expectedIndex := slices.Index(options, dummyDefaultValue)
assert.Equal(t, expectedIndex, selectValue)
})
t.Run("MultiSelect", func(t *testing.T) {
console := newTestVirtualTerminal(t)
p := newTestAccessiblePrompter(t, console)

View file

@ -77,10 +77,15 @@ func (p *accessiblePrompter) newForm(groups ...*huh.Group) *huh.Form {
WithOutput(p.stdout)
}
func (p *accessiblePrompter) Select(prompt, _ string, options []string) (int, error) {
func (p *accessiblePrompter) Select(prompt, defaultValue string, options []string) (int, error) {
var result int
formOptions := []huh.Option[int]{}
for i, o := range options {
// If this option is the default value, assign its index
// to the result variable. huh will treat it as a default selection.
if defaultValue == o {
result = i
}
formOptions = append(formOptions, huh.NewOption(o, i))
}