github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/cloudlets/errors_test.go (about) 1 package cloudlets 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "net/http" 7 "strings" 8 "testing" 9 10 "github.com/akamai/AkamaiOPEN-edgegrid-golang/v2/pkg/session" 11 "github.com/stretchr/testify/require" 12 "github.com/tj/assert" 13 ) 14 15 func TestNewError(t *testing.T) { 16 sess, err := session.New() 17 require.NoError(t, err) 18 19 req, err := http.NewRequest( 20 http.MethodHead, 21 "/", 22 nil) 23 require.NoError(t, err) 24 25 tests := map[string]struct { 26 response *http.Response 27 expected *Error 28 }{ 29 "valid response, status code 500": { 30 response: &http.Response{ 31 Status: "Internal Server Error", 32 StatusCode: http.StatusInternalServerError, 33 Body: ioutil.NopCloser(strings.NewReader( 34 `{"type":"a","title":"b","detail":"c"}`), 35 ), 36 Request: req, 37 }, 38 expected: &Error{ 39 Type: "a", 40 Title: "b", 41 Detail: "c", 42 StatusCode: http.StatusInternalServerError, 43 }, 44 }, 45 "invalid response body, assign status code": { 46 response: &http.Response{ 47 Status: "Internal Server Error", 48 StatusCode: http.StatusInternalServerError, 49 Body: ioutil.NopCloser(strings.NewReader( 50 `test`), 51 ), 52 Request: req, 53 }, 54 expected: &Error{ 55 Title: "test", 56 Detail: "", 57 StatusCode: http.StatusInternalServerError, 58 }, 59 }, 60 } 61 for name, test := range tests { 62 t.Run(name, func(t *testing.T) { 63 res := Client(sess).(*cloudlets).Error(test.response) 64 assert.Equal(t, test.expected, res) 65 }) 66 } 67 } 68 69 func TestAs(t *testing.T) { 70 someErrorMarshalled, _ := json.Marshal("some error") 71 tests := map[string]struct { 72 err Error 73 target Error 74 expected bool 75 }{ 76 "different error code": { 77 err: Error{StatusCode: 404}, 78 target: Error{StatusCode: 401}, 79 expected: false, 80 }, 81 "same error code": { 82 err: Error{StatusCode: 404}, 83 target: Error{StatusCode: 404}, 84 expected: true, 85 }, 86 "same error code and error message": { 87 err: Error{StatusCode: 404, Errors: someErrorMarshalled}, 88 target: Error{StatusCode: 404, Errors: someErrorMarshalled}, 89 expected: true, 90 }, 91 "same error code and different error message": { 92 err: Error{StatusCode: 404, Errors: someErrorMarshalled}, 93 target: Error{StatusCode: 404}, 94 expected: false, 95 }, 96 } 97 98 for name, test := range tests { 99 t.Run(name, func(t *testing.T) { 100 assert.Equal(t, test.err.Is(&test.target), test.expected) 101 }) 102 } 103 }