This commit is contained in:
chyroc 2019-10-21 09:26:20 +08:00
parent 21557deb22
commit a06e26a0a7
No known key found for this signature in database
GPG Key ID: 5CEACB2EE6A2FEFA
2 changed files with 28 additions and 5 deletions

View File

@ -25,7 +25,7 @@ type Errors []error
func IsRecordNotFoundError(err error) bool {
if errs, ok := err.(Errors); ok {
for _, err := range errs {
if isError(err, ErrRecordNotFound) {
if IsRecordNotFoundError(err) {
return true
}
}
@ -70,3 +70,21 @@ func (errs Errors) Error() string {
}
return strings.Join(errors, "; ")
}
func (errs Errors) Is(target error) bool {
if target == nil {
return errs == nil
}
for _, err := range errs {
if errs, ok := err.(Errors); ok {
if errs.Is(target) {
return true
}
continue
}
return errors.Is(err, target)
}
return false
}

View File

@ -19,11 +19,16 @@ func TestNotFound(t *testing.T) {
gorm.Errors{gorm.ErrRecordNotFound, fmt.Errorf("get user fail: %w", gorm.ErrRecordNotFound)},
gorm.Errors{fmt.Errorf("get user fail: %w", gorm.ErrRecordNotFound), fmt.Errorf("get user fail: %w", gorm.ErrRecordNotFound)},
gorm.Errors{gorm.Errors{fmt.Errorf("get user fail: %w", gorm.ErrRecordNotFound), gorm.ErrRecordNotFound}, gorm.ErrRecordNotFound},
fmt.Errorf("get user fail: %w", gorm.Errors{gorm.ErrRecordNotFound}),
fmt.Errorf("get user fail: %w", gorm.Errors{gorm.ErrRecordNotFound, fmt.Errorf("get user fail: %w", gorm.ErrRecordNotFound)}),
fmt.Errorf("get user fail: %w", gorm.Errors{fmt.Errorf("get user fail: %w", gorm.ErrRecordNotFound), gorm.ErrRecordNotFound}),
fmt.Errorf("get user fail: %w", gorm.Errors{fmt.Errorf("get user fail: %w", gorm.ErrRecordNotFound), fmt.Errorf("get user fail: %w", gorm.ErrRecordNotFound)}),
}
for _, err := range errs {
for idx, err := range errs {
if !gorm.IsRecordNotFoundError(err) {
t.Errorf("%s should be ErrRecordNotFound", err)
t.Errorf("%s(%d) should be ErrRecordNotFound", err, idx)
}
}
@ -34,9 +39,9 @@ func TestNotFound(t *testing.T) {
fmt.Errorf("get user fail: %+v", gorm.ErrRecordNotFound),
}
for _, err := range errs {
for idx, err := range errs {
if gorm.IsRecordNotFoundError(err) {
t.Errorf("%s should not be ErrRecordNotFound", err)
t.Errorf("%s(%d) should not be ErrRecordNotFound", err, idx)
}
}
}