chore(go): wrap core filesystem errors with context
This commit is contained in:
@@ -17,6 +17,12 @@ func (errReader) Read(_ []byte) (int, error) {
|
||||
return 0, errors.New("boom")
|
||||
}
|
||||
|
||||
type errWriter struct{}
|
||||
|
||||
func (errWriter) Write(_ []byte) (int, error) {
|
||||
return 0, errors.New("boom")
|
||||
}
|
||||
|
||||
func TestRunGitPretendWritesStatus(t *testing.T) {
|
||||
stdout := &bytes.Buffer{}
|
||||
app := &App{Stdout: stdout, Stderr: bytes.NewBuffer(nil), Pretend: true}
|
||||
@@ -119,6 +125,19 @@ func TestLinkPath(t *testing.T) {
|
||||
require.NoError(t, statErr)
|
||||
require.True(t, info.Mode()&os.ModeSymlink != 0)
|
||||
})
|
||||
|
||||
t.Run("create destination parent error includes context", func(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
source := filepath.Join(dir, "source")
|
||||
blocker := filepath.Join(dir, "blocker")
|
||||
require.NoError(t, os.WriteFile(source, []byte("x"), 0o644))
|
||||
require.NoError(t, os.WriteFile(blocker, []byte("x"), 0o644))
|
||||
|
||||
app := &App{Stdout: bytes.NewBuffer(nil), Stderr: bytes.NewBuffer(nil)}
|
||||
err := app.linkPath(source, filepath.Join(blocker, "dest"))
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "create destination parent")
|
||||
})
|
||||
}
|
||||
|
||||
func TestReadSubdirsAndMatchesIgnoredDir(t *testing.T) {
|
||||
@@ -141,6 +160,12 @@ func TestReadSubdirsAndMatchesIgnoredDir(t *testing.T) {
|
||||
require.False(t, notIgnored)
|
||||
}
|
||||
|
||||
func TestReadSubdirsReadErrorIncludesContext(t *testing.T) {
|
||||
_, err := readSubdirs(t.TempDir())
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "read subdirs")
|
||||
}
|
||||
|
||||
func TestPullAndPushDefaultCastlePretend(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
stdout := &bytes.Buffer{}
|
||||
@@ -230,6 +255,15 @@ func TestConfirmDestroyReadError(t *testing.T) {
|
||||
ok, err := app.confirmDestroy("dotfiles")
|
||||
require.Error(t, err)
|
||||
require.False(t, ok)
|
||||
require.Contains(t, err.Error(), "read destroy confirmation")
|
||||
}
|
||||
|
||||
func TestConfirmDestroyWriteError(t *testing.T) {
|
||||
app := &App{Stdout: errWriter{}, Stdin: strings.NewReader("yes\n")}
|
||||
ok, err := app.confirmDestroy("dotfiles")
|
||||
require.Error(t, err)
|
||||
require.False(t, ok)
|
||||
require.Contains(t, err.Error(), "write destroy prompt")
|
||||
}
|
||||
|
||||
func TestExecAllWrapsCastleError(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user