-
Notifications
You must be signed in to change notification settings - Fork 70
/
Copy patherrors_test.go
125 lines (118 loc) · 3.3 KB
/
errors_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package hapi
import (
"context"
"io/ioutil"
"net/http"
"strings"
"testing"
"github.com/akamai/AkamaiOPEN-edgegrid-golang/v9/pkg/session"
"github.com/stretchr/testify/require"
"github.com/tj/assert"
)
func TestNewError(t *testing.T) {
sess, err := session.New()
require.NoError(t, err)
req, err := http.NewRequestWithContext(
context.TODO(),
http.MethodHead,
"/",
nil)
require.NoError(t, err)
tests := map[string]struct {
response *http.Response
expected *Error
}{
"valid response, status code 500": {
response: &http.Response{
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Body: ioutil.NopCloser(strings.NewReader(
`{"type":"a","title":"b","detail":"c"}`),
),
Request: req,
},
expected: &Error{
Type: "a",
Title: "b",
Detail: "c",
Status: http.StatusInternalServerError,
},
},
"invalid response body, assign status code": {
response: &http.Response{
Status: "Internal Server Error",
StatusCode: http.StatusInternalServerError,
Body: ioutil.NopCloser(strings.NewReader(
`test`),
),
Request: req,
},
expected: &Error{
Title: "Failed to unmarshal error body. HAPI API failed. Check details for more information.",
Detail: "test",
Status: http.StatusInternalServerError,
},
},
}
for name, test := range tests {
t.Run(name, func(t *testing.T) {
res := Client(sess).(*hapi).Error(test.response)
assert.Equal(t, test.expected, res)
})
}
}
func TestJsonErrorUnmarshalling(t *testing.T) {
req, err := http.NewRequestWithContext(
context.TODO(),
http.MethodHead,
"/",
nil)
require.NoError(t, err)
tests := map[string]struct {
input *http.Response
expected *Error
}{
"API failure with HTML response": {
input: &http.Response{
Request: req,
Status: "OK",
Body: ioutil.NopCloser(strings.NewReader(`<HTML><HEAD>...</HEAD><BODY>...</BODY></HTML>`))},
expected: &Error{
Type: "",
Title: "Failed to unmarshal error body. HAPI API failed. Check details for more information.",
Detail: "<HTML><HEAD>...</HEAD><BODY>...</BODY></HTML>",
},
},
"API failure with plain text response": {
input: &http.Response{
Request: req,
Status: "OK",
Body: ioutil.NopCloser(strings.NewReader("Your request did not succeed as this operation has reached the limit for your account. Please try after 2024-01-16T15:20:55.945Z"))},
expected: &Error{
Type: "",
Title: "Failed to unmarshal error body. HAPI API failed. Check details for more information.",
Detail: "Your request did not succeed as this operation has reached the limit for your account. Please try after 2024-01-16T15:20:55.945Z",
},
},
"API failure with XML response": {
input: &http.Response{
Request: req,
Status: "OK",
Body: ioutil.NopCloser(strings.NewReader(`<Root><Item id="1" name="Example" /></Root>`))},
expected: &Error{
Type: "",
Title: "Failed to unmarshal error body. HAPI API failed. Check details for more information.",
Detail: "<Root><Item id=\"1\" name=\"Example\" /></Root>",
},
},
}
for name, test := range tests {
t.Run(name, func(t *testing.T) {
sess, _ := session.New()
g := hapi{
Session: sess,
}
assert.Equal(t, test.expected, g.Error(test.input))
})
}
}