package main import ( "slices" "testing" "git.avsdev.uk/Go/job-search/internal/cli/cmdtest" ) // The commands are tested in their own packages under internal/cli. These // tests check newRootCmd puts them together. func TestCommandTree(t *testing.T) { root := newRootCmd() var names []string for _, c := range root.Commands() { names = append(names, c.Name()) } commands := []string{"config", "migrate", "serve", "skip-rules", "version"} for _, want := range commands { if !slices.Contains(names, want) { t.Errorf("job-search has no %q command; has %v", want, names) } } for _, flag := range []string{"config", "debug", "quiet"} { if root.PersistentFlags().Lookup(flag) == nil { t.Errorf("job-search has no --%s flag", flag) } } } func TestVersion(t *testing.T) { cmdtest.Setup(t, "") cmdtest.Contains(t, cmdtest.MustRun(t, newRootCmd, "version"), "JobSearch - ") } // A command that loads the configuration runs through the real root: its // flags and hooks, and the subcommand beneath it. func TestRootRunsCommands(t *testing.T) { cmdtest.Setup(t, "logging:\n level: info\n") cmdtest.Contains( t, cmdtest.MustRun(t, newRootCmd, "config", "get", "logging.level"), "info ", ) cmdtest.Contains( t, cmdtest.MustRun(t, newRootCmd, "config", "get", "logging.level", "--debug"), "debug ", ) } func TestUnknownCommand(t *testing.T) { cmdtest.Setup(t, "") if _, err := cmdtest.Run(t, newRootCmd, "", "nope"); err == nil { t.Error("an unknown command was accepted") } }