sq/libsq/core/errz/errz_test.go
Neil O'Toole 2f2dfd6e47
#229: More diff (#233)
- Implement `sq diff --data`.
2023-05-22 09:08:14 -06:00

75 lines
1.7 KiB
Go

package errz_test
import (
"database/sql"
"errors"
"fmt"
"testing"
"github.com/neilotoole/slogt"
"github.com/neilotoole/sq/libsq/core/lg/lga"
"github.com/neilotoole/sq/libsq/core/errz"
"github.com/stretchr/testify/require"
)
func TestIs(t *testing.T) {
err := errz.Wrap(sql.ErrNoRows, "wrap")
require.Equal(t, "wrap: "+sql.ErrNoRows.Error(), err.Error())
require.True(t, errors.Is(err, sql.ErrNoRows))
}
func TestAs(t *testing.T) {
var originalErr error //nolint:gosimple
originalErr = &CustomError{msg: "huzzah"}
err := errz.Wrap(errz.Wrap(originalErr, "wrap"), "wrap")
require.Equal(t, "wrap: wrap: huzzah", err.Error())
var gotCustomErr *CustomError
require.True(t, errors.As(err, &gotCustomErr))
require.Equal(t, "huzzah", gotCustomErr.msg)
gotUnwrap := errz.Cause(err)
require.Equal(t, *originalErr.(*CustomError), *gotUnwrap.(*CustomError)) //nolint:errorlint
}
type CustomError struct {
msg string
}
func (e *CustomError) Error() string {
return e.msg
}
func TestLogError_LogValue(t *testing.T) {
log := slogt.New(t)
nakedErr := sql.ErrNoRows
log.Debug("naked", lga.Err, nakedErr)
zErr := errz.Err(nakedErr)
log.Debug("via errz.Err", lga.Err, zErr)
wrapErr := errz.Wrap(nakedErr, "wrap me")
log.Debug("via errz.Wrap", lga.Err, wrapErr)
}
func TestIsErrRelationNotExist(t *testing.T) {
var err error
require.False(t, errz.IsErrNotExist(err))
require.False(t, errz.IsErrNotExist(errz.New("huzzah")))
var rne1 *errz.NotExistError
require.True(t, errz.IsErrNotExist(rne1))
var rne2 *errz.NotExistError
require.True(t, errors.As(rne1, &rne2))
err = errz.NotExist(errz.New("huzzah"))
require.True(t, errz.IsErrNotExist(err))
err = fmt.Errorf("wrap me: %w", err)
require.True(t, errz.IsErrNotExist(err))
}