github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/gin/errors_test.go (about)

     1  // Copyright 2014 Manu Martinez-Almeida.  All rights reserved.
     2  // Use of this source code is governed by a MIT style
     3  // license that can be found in the LICENSE file.
     4  
     5  package gin
     6  
     7  import (
     8  	"errors"
     9  	"testing"
    10  
    11  	"github.com/hellobchain/third_party/gin/internal/json"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestError(t *testing.T) {
    16  	baseError := errors.New("test error")
    17  	err := &Error{
    18  		Err:  baseError,
    19  		Type: ErrorTypePrivate,
    20  	}
    21  	assert.Equal(t, err.Error(), baseError.Error())
    22  	assert.Equal(t, H{"error": baseError.Error()}, err.JSON())
    23  
    24  	assert.Equal(t, err.SetType(ErrorTypePublic), err)
    25  	assert.Equal(t, ErrorTypePublic, err.Type)
    26  
    27  	assert.Equal(t, err.SetMeta("some data"), err)
    28  	assert.Equal(t, "some data", err.Meta)
    29  	assert.Equal(t, H{
    30  		"error": baseError.Error(),
    31  		"meta":  "some data",
    32  	}, err.JSON())
    33  
    34  	jsonBytes, _ := json.Marshal(err)
    35  	assert.Equal(t, "{\"error\":\"test error\",\"meta\":\"some data\"}", string(jsonBytes))
    36  
    37  	err.SetMeta(H{ // nolint: errcheck
    38  		"status": "200",
    39  		"data":   "some data",
    40  	})
    41  	assert.Equal(t, H{
    42  		"error":  baseError.Error(),
    43  		"status": "200",
    44  		"data":   "some data",
    45  	}, err.JSON())
    46  
    47  	err.SetMeta(H{ // nolint: errcheck
    48  		"error":  "custom error",
    49  		"status": "200",
    50  		"data":   "some data",
    51  	})
    52  	assert.Equal(t, H{
    53  		"error":  "custom error",
    54  		"status": "200",
    55  		"data":   "some data",
    56  	}, err.JSON())
    57  
    58  	type customError struct {
    59  		status string
    60  		data   string
    61  	}
    62  	err.SetMeta(customError{status: "200", data: "other data"}) // nolint: errcheck
    63  	assert.Equal(t, customError{status: "200", data: "other data"}, err.JSON())
    64  }
    65  
    66  func TestErrorSlice(t *testing.T) {
    67  	errs := errorMsgs{
    68  		{Err: errors.New("first"), Type: ErrorTypePrivate},
    69  		{Err: errors.New("second"), Type: ErrorTypePrivate, Meta: "some data"},
    70  		{Err: errors.New("third"), Type: ErrorTypePublic, Meta: H{"status": "400"}},
    71  	}
    72  
    73  	assert.Equal(t, errs, errs.ByType(ErrorTypeAny))
    74  	assert.Equal(t, "third", errs.Last().Error())
    75  	assert.Equal(t, []string{"first", "second", "third"}, errs.Errors())
    76  	assert.Equal(t, []string{"third"}, errs.ByType(ErrorTypePublic).Errors())
    77  	assert.Equal(t, []string{"first", "second"}, errs.ByType(ErrorTypePrivate).Errors())
    78  	assert.Equal(t, []string{"first", "second", "third"}, errs.ByType(ErrorTypePublic|ErrorTypePrivate).Errors())
    79  	assert.Empty(t, errs.ByType(ErrorTypeBind))
    80  	assert.Empty(t, errs.ByType(ErrorTypeBind).String())
    81  
    82  	assert.Equal(t, `Error #01: first
    83  Error #02: second
    84       Meta: some data
    85  Error #03: third
    86       Meta: map[status:400]
    87  `, errs.String())
    88  	assert.Equal(t, []interface{}{
    89  		H{"error": "first"},
    90  		H{"error": "second", "meta": "some data"},
    91  		H{"error": "third", "status": "400"},
    92  	}, errs.JSON())
    93  	jsonBytes, _ := json.Marshal(errs)
    94  	assert.Equal(t, "[{\"error\":\"first\"},{\"error\":\"second\",\"meta\":\"some data\"},{\"error\":\"third\",\"status\":\"400\"}]", string(jsonBytes))
    95  	errs = errorMsgs{
    96  		{Err: errors.New("first"), Type: ErrorTypePrivate},
    97  	}
    98  	assert.Equal(t, H{"error": "first"}, errs.JSON())
    99  	jsonBytes, _ = json.Marshal(errs)
   100  	assert.Equal(t, "{\"error\":\"first\"}", string(jsonBytes))
   101  
   102  	errs = errorMsgs{}
   103  	assert.Nil(t, errs.Last())
   104  	assert.Nil(t, errs.JSON())
   105  	assert.Empty(t, errs.String())
   106  }