package cli_test import ( "bytes" "os" "path/filepath" "testing" "git.hrafn.xyz/aether/gosick/internal/homesick/cli" "git.hrafn.xyz/aether/gosick/internal/homesick/version" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" ) type CLISuite struct { suite.Suite homeDir string stdout *bytes.Buffer stderr *bytes.Buffer } func TestCLISuite(t *testing.T) { suite.Run(t, new(CLISuite)) } func (s *CLISuite) SetupTest() { s.homeDir = filepath.Join(s.T().TempDir(), "home") require.NoError(s.T(), os.MkdirAll(s.homeDir, 0o755)) require.NoError(s.T(), os.Setenv("HOME", s.homeDir)) s.stdout = &bytes.Buffer{} s.stderr = &bytes.Buffer{} } func (s *CLISuite) TestRun_VersionAliases() { for _, args := range [][]string{{"-v"}, {"--version"}, {"version"}} { s.stdout.Reset() s.stderr.Reset() exitCode := cli.Run(args, s.stdout, s.stderr) require.Equal(s.T(), 0, exitCode) require.Equal(s.T(), version.String+"\n", s.stdout.String()) require.Empty(s.T(), s.stderr.String()) } } func (s *CLISuite) TestRun_ShowPath_DefaultCastle() { exitCode := cli.Run([]string{"show_path"}, s.stdout, s.stderr) require.Equal(s.T(), 0, exitCode) require.Equal(s.T(), filepath.Join(s.homeDir, ".homesick", "repos", "dotfiles")+"\n", s.stdout.String()) require.Empty(s.T(), s.stderr.String()) } func (s *CLISuite) TestRun_CloneSubcommandHelp() { exitCode := cli.Run([]string{"clone", "--help"}, s.stdout, s.stderr) require.Equal(s.T(), 0, exitCode) require.Contains(s.T(), s.stdout.String(), "clone") require.Contains(s.T(), s.stdout.String(), "URI") require.Empty(s.T(), s.stderr.String()) } func (s *CLISuite) TestRun_Help_UsesProgramNameAndDescription() { originalArgs := os.Args s.T().Cleanup(func() { os.Args = originalArgs }) os.Args = []string{"gosick"} exitCode := cli.Run([]string{"--help"}, s.stdout, s.stderr) require.Equal(s.T(), 0, exitCode) require.Contains(s.T(), s.stdout.String(), "Usage: gosick") require.NotContains(s.T(), s.stdout.String(), "Usage: homesick") require.Contains(s.T(), s.stdout.String(), "precious dotfiles") require.Empty(s.T(), s.stderr.String()) }