mirror of
https://github.com/hanzo-fi/go-libs.git
synced 2026-10-30 20:53:44 +00:00
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"reflect"
|
|
|
|
"github.com/onsi/gomega/types"
|
|
|
|
"github.com/hanzo-fi/go-libs/v5/pkg/transport/api"
|
|
)
|
|
|
|
type HaveErrorCodeMatcher struct {
|
|
lastSeen string
|
|
lastSeenMessage string
|
|
expected string
|
|
}
|
|
|
|
func (s *HaveErrorCodeMatcher) Match(actual interface{}) (success bool, err error) {
|
|
|
|
errorResponse := api.ErrorResponse{}
|
|
switch {
|
|
case errors.Is(err, errorResponse):
|
|
if !errors.As(err, &errorResponse) {
|
|
return false, nil
|
|
}
|
|
default:
|
|
data, err := json.Marshal(actual)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
if err = json.Unmarshal(data, &errorResponse); err != nil {
|
|
return false, err
|
|
}
|
|
if errorResponse.ErrorCode == "" {
|
|
return false, nil
|
|
}
|
|
}
|
|
|
|
s.lastSeen = errorResponse.ErrorCode
|
|
s.lastSeenMessage = errorResponse.ErrorMessage
|
|
|
|
return reflect.DeepEqual(errorResponse.ErrorCode, s.expected), nil
|
|
}
|
|
|
|
func (s *HaveErrorCodeMatcher) FailureMessage(actual interface{}) (message string) {
|
|
if actual == nil {
|
|
return fmt.Sprintf("error should have code %s but is nil", s.expected)
|
|
}
|
|
return fmt.Sprintf("error should have code %s but have %s with message '%s'", s.expected, s.lastSeen, s.lastSeenMessage)
|
|
}
|
|
|
|
func (s *HaveErrorCodeMatcher) NegatedFailureMessage(actual interface{}) (message string) {
|
|
return fmt.Sprintf("error should not have code %s", s.expected)
|
|
}
|
|
|
|
var _ types.GomegaMatcher = (*HaveErrorCodeMatcher)(nil)
|
|
|
|
func HaveErrorCode(expected string) *HaveErrorCodeMatcher {
|
|
return &HaveErrorCodeMatcher{
|
|
expected: expected,
|
|
}
|
|
}
|