@@ -56,7 +56,23 @@ func TestUnmarshal(t *testing.T) {
56
56
}
57
57
}
58
58
59
- func TestClient_ErrorFromResponse (t * testing.T ) {
59
+ func TestClient_ErrorFromResponse_non_json (t * testing.T ) {
60
+
61
+ givenPayload := "non json body"
62
+ expected := "401 Unauthorized"
63
+ c := Client {}
64
+
65
+ resp := & http.Response {
66
+ Status : "401 Unauthorized" ,
67
+ Body : io .NopCloser (strings .NewReader (givenPayload )),
68
+ }
69
+ err := c .ErrorFromResponse (resp )
70
+ if err .Error () != expected {
71
+ t .Errorf ("expected err %v, got %v" , expected , err )
72
+ }
73
+ }
74
+
75
+ func TestClient_ErrorFromResponse_standard_error_format (t * testing.T ) {
60
76
type Error struct {
61
77
Reason string `json:"reason"`
62
78
Message string `json:"message"`
@@ -94,6 +110,68 @@ func TestClient_ErrorFromResponse(t *testing.T) {
94
110
}
95
111
}
96
112
113
+ func TestClient_ErrorFromResponse_standard_error_format_2 (t * testing.T ) {
114
+
115
+ givenPayload := `
116
+ {
117
+ "timestamp" : 1715255725613,
118
+ "status" : 401,
119
+ "error" : "Unauthorized",
120
+ "path" : "/api/v2/alerts/46667521"
121
+ }
122
+ `
123
+ expected := "Unauthorized"
124
+ c := Client {}
125
+
126
+ resp := & http.Response {
127
+ Status : "401 Unauthorized" ,
128
+ Body : io .NopCloser (strings .NewReader (givenPayload )),
129
+ }
130
+ err := c .ErrorFromResponse (resp )
131
+ if err .Error () != expected {
132
+ t .Errorf ("expected err %v, got %v" , expected , err )
133
+ }
134
+ }
135
+
136
+ func TestClient_ErrorFromResponse_json_nonStandard_error_format (t * testing.T ) {
137
+ type Error struct {
138
+ Reason string `json:"nonStandardFieldNameReason"`
139
+ Message string `json:"nonStandardFieldNameMessage"`
140
+ }
141
+
142
+ type Errors struct {
143
+ Errors []Error `json:"errors"`
144
+ }
145
+
146
+ given := Errors {
147
+ Errors : []Error {
148
+ {
149
+ Reason : "error1" ,
150
+ Message : "message1" ,
151
+ },
152
+ {
153
+ Reason : "error2" ,
154
+ Message : "message2" ,
155
+ },
156
+ },
157
+ }
158
+ expected := "401 Unauthorized"
159
+ c := Client {}
160
+ payload , err := json .Marshal (given )
161
+ if err != nil {
162
+ t .Errorf ("failed to marshal errors, %v" , err )
163
+ }
164
+
165
+ resp := & http.Response {
166
+ Status : "401 Unauthorized" ,
167
+ Body : io .NopCloser (strings .NewReader (string (payload ))),
168
+ }
169
+ err = c .ErrorFromResponse (resp )
170
+ if err .Error () != expected {
171
+ t .Errorf ("expected err %v, got %v" , expected , err )
172
+ }
173
+ }
174
+
97
175
func TestRequest (t * testing.T ) {
98
176
server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
99
177
agent := r .Header .Get (UserAgentHeader )
0 commit comments