93 lines
2.7 KiB
Go
93 lines
2.7 KiB
Go
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_Cd_DefaultCastle() {
|
|
exitCode := cli.Run([]string{"cd"}, 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_Cd_ExplicitCastle() {
|
|
exitCode := cli.Run([]string{"cd", "work"}, s.stdout, s.stderr)
|
|
|
|
require.Equal(s.T(), 0, exitCode)
|
|
require.Equal(s.T(), filepath.Join(s.homeDir, ".homesick", "repos", "work")+"\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())
|
|
}
|