@@ -56,7 +56,23 @@ func TestUnmarshal(t *testing.T) {
5656 }
5757}
5858
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 ) {
6076 type Error struct {
6177 Reason string `json:"reason"`
6278 Message string `json:"message"`
@@ -94,6 +110,68 @@ func TestClient_ErrorFromResponse(t *testing.T) {
94110 }
95111}
96112
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+
97175func TestRequest (t * testing.T ) {
98176 server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
99177 agent := r .Header .Get (UserAgentHeader )
0 commit comments