package cmd import ( "bytes" "strings" "testing" ) func TestRootCmd_NoArgs_ShowsHelp(t *testing.T) { rootCmd.SetArgs([]string{}) var stdout bytes.Buffer rootCmd.SetOut(&stdout) err := rootCmd.Execute() if err != nil { t.Fatalf("expected no error for zero args, got: %v", err) } output := stdout.String() if !strings.Contains(output, "Available Commands") { t.Errorf("expected help output, got: %s", output) } } func TestRootCmd_UnknownCommand_ReturnsError(t *testing.T) { rootCmd.SetArgs([]string{"notacommand"}) var stderr bytes.Buffer rootCmd.SetErr(&stderr) err := rootCmd.Execute() if err == nil { t.Fatal("expected error for unknown command, got nil") } errMsg := err.Error() if !strings.Contains(errMsg, "unknown command") { t.Errorf("expected 'unknown command' error, got: %s", errMsg) } } func TestAddnoteCmd_NoArgs_ReturnsError(t *testing.T) { rootCmd.SetArgs([]string{"addnote"}) err := rootCmd.Execute() if err == nil { t.Fatal("expected error for addnote with no args, got nil") } errMsg := err.Error() if !strings.Contains(errMsg, "requires a note text argument") { t.Errorf("expected 'requires a note text argument' error, got: %s", errMsg) } } func TestAddnoteCmd_TooManyArgs_ReturnsError(t *testing.T) { rootCmd.SetArgs([]string{"addnote", "hello", "world"}) err := rootCmd.Execute() if err == nil { t.Fatal("expected error for addnote with too many args, got nil") } errMsg := err.Error() if !strings.Contains(errMsg, "quote your note text") { t.Errorf("expected 'accepts 1 arg' error, got: %s", errMsg) } }