package repl // Tests for /btw discoverability (#283, US-006/FR-10): /btw must appear in the // /help listing and be completable at the REPL slash prompt. Both flow from // registering "btw" as a listed built-in in registerLiveCommands; these tests // pin that so the command can't silently drop off help/completion. import ( "strings" "testing" "github.com/smallnest/pigo/internal/cli" "github.com/smallnest/pigo/internal/cli/prompts" "github.com/smallnest/pigo/internal/runtime" ) // TestBtwListedInHelp verifies registerLiveCommands registers /btw so /help (and // any consumer of reg.List()) surfaces it with a usage description. func TestBtwListedInHelp(t *testing.T) { reg := runtime.NewSlashRegistry() prompts.RegisterLiveCommands(reg, &cli.LiveConfig{}) var btw *runtime.SlashCommand for _, c := range reg.List() { if c.Name == "btw" { cc := c btw = &cc break } } if btw == nil { t.Fatalf("registerLiveCommands must register /btw so /help lists it") } if !strings.Contains(btw.Description, "side question") { t.Errorf("/btw help description should explain the side question, got %q", btw.Description) } } // TestBtwSlashCompletion verifies the line editor completes "/b" to "/btw" once // the command is registered — the same reg.List() drives both help and // completion, so registration is all that's needed. func TestBtwSlashCompletion(t *testing.T) { reg := runtime.NewSlashRegistry() prompts.RegisterLiveCommands(reg, &cli.LiveConfig{}) e := newREPLLineEditor(nil, nil, nil, reg, nil) cands := e.suggestions("/bt") found := false for _, c := range cands { if c == "/btw" { found = true break } } if !found { t.Errorf("expected /btw among completions for %q, got %v", "/bt", cands) } }