package apperror_test import ( "fmt" "testing" "github.com/pkg/errors" "github.com/stretchr/testify/assert" "edge-infra.dev/pkg/edge/iam/apperror" ) func TestErrorChainWhenWrapped(t *testing.T) { dbErr := errors.New("(user db) -> user not found in db") svcErr := fmt.Errorf("(user service) -> %w", dbErr) handlerErr := apperror.NewStatusError(svcErr, 404) errChain := apperror.ErrorChain(handlerErr) assert.Equal(t, "[404]: (user service) -> (user db) -> user not found in db", errChain) assert.Equal(t, "(user service) -> (user db) -> user not found in db", handlerErr.Error()) } func TestErrorChainWithAppError(t *testing.T) { // db returns an app error err := errors.New("SQL_ERR::NO_ROWS") dbErr := apperror.New(err, "not_found", "user not found in db") // service wraps the error svcErr := fmt.Errorf("(user service) -> %w", dbErr) // handler wraps it into a status error handlerErr := apperror.NewStatusError(svcErr, 404) errChain := apperror.ErrorChain(handlerErr) assert.Equal(t, "[404]: (user service) -> user not found in db . SQL_ERR::NO_ROWS", errChain) assert.Equal(t, "(user service) -> user not found in db . SQL_ERR::NO_ROWS", handlerErr.Error()) } func TestAppError(t *testing.T) { dbErr := errors.New("SQL_ERR::NO_ROWS") appErr := apperror.New(dbErr, "not_found", "user not found in db") assert.Equal(t, "user not found in db . SQL_ERR::NO_ROWS", appErr.Error()) } func TestErrorCode(t *testing.T) { dbErr := errors.New("SQL_ERR::NO_ROWS") appErr := apperror.New(dbErr, "not_found", "user not found in db") assert.Equal(t, "", apperror.ErrorCode(dbErr)) assert.Equal(t, "not_found", apperror.ErrorCode(appErr)) assert.Equal(t, "user not found in db . SQL_ERR::NO_ROWS", appErr.Error()) }