2022-10-25 17:32:46 +03:00
|
|
|
package v1
|
|
|
|
|
|
|
|
import (
|
2022-10-26 10:54:54 +03:00
|
|
|
"bytes"
|
2022-10-25 17:32:46 +03:00
|
|
|
"errors"
|
2022-10-26 10:54:54 +03:00
|
|
|
"fmt"
|
2022-10-28 10:05:11 +03:00
|
|
|
"io/ioutil"
|
2022-10-26 10:54:54 +03:00
|
|
|
"net/http"
|
2022-10-25 17:32:46 +03:00
|
|
|
"net/url"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestNewCriticalHTTPError(t *testing.T) {
|
|
|
|
err := &url.Error{Op: "Get", URL: "http//example.com", Err: errors.New("EOF")}
|
|
|
|
httpErr := NewCriticalHTTPError(err)
|
|
|
|
|
2022-10-27 09:28:07 +03:00
|
|
|
assert.IsType(t, new(HTTPClientError), httpErr)
|
2022-10-25 17:32:46 +03:00
|
|
|
assert.IsType(t, new(url.Error), errors.Unwrap(httpErr))
|
|
|
|
assert.IsType(t, new(url.Error), errors.Unwrap(httpErr))
|
2022-10-26 18:07:04 +03:00
|
|
|
assert.Equal(t, httpErr.Error(), fmt.Sprintf("%s: %s", defaultErrorMessage, err.Error()))
|
2022-10-25 17:32:46 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewApiClientError(t *testing.T) {
|
|
|
|
body := []byte(`{"errors" : ["Channel not found"]}`)
|
|
|
|
httpErr := NewAPIClientError(body)
|
|
|
|
|
2022-10-27 09:28:07 +03:00
|
|
|
assert.IsType(t, new(HTTPClientError), httpErr)
|
2022-10-25 17:32:46 +03:00
|
|
|
assert.Equal(t, httpErr.Error(), "Channel not found")
|
|
|
|
|
|
|
|
body = []byte{}
|
|
|
|
httpErr = NewAPIClientError(body)
|
|
|
|
|
2022-10-27 09:28:07 +03:00
|
|
|
assert.IsType(t, new(HTTPClientError), httpErr)
|
2022-10-25 17:32:46 +03:00
|
|
|
assert.Equal(t, httpErr.Error(), internalServerError)
|
2022-10-26 10:54:54 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewServerError(t *testing.T) {
|
|
|
|
body := []byte(`{"errors" : ["Something went wrong"]}`)
|
|
|
|
response := new(http.Response)
|
2022-10-28 10:05:11 +03:00
|
|
|
response.Body = ioutil.NopCloser(bytes.NewReader(body))
|
2022-10-26 10:54:54 +03:00
|
|
|
serverErr := NewServerError(response)
|
|
|
|
|
2022-10-27 09:28:07 +03:00
|
|
|
assert.IsType(t, new(HTTPClientError), serverErr)
|
2022-10-26 10:54:54 +03:00
|
|
|
assert.Equal(t, serverErr.Error(), "Something went wrong")
|
|
|
|
|
2022-10-27 09:28:07 +03:00
|
|
|
var err *HTTPClientError
|
2022-10-26 10:54:54 +03:00
|
|
|
if errors.As(serverErr, &err) {
|
2022-10-26 18:07:04 +03:00
|
|
|
assert.NotNil(t, err.Response)
|
2022-10-26 10:54:54 +03:00
|
|
|
} else {
|
|
|
|
t.Fatal("Unexpected type of error")
|
|
|
|
}
|
2022-10-26 18:07:04 +03:00
|
|
|
|
|
|
|
body = []byte(`{"invalid_json"`)
|
|
|
|
response = new(http.Response)
|
2022-10-28 10:05:11 +03:00
|
|
|
response.Body = ioutil.NopCloser(bytes.NewReader(body))
|
2022-10-26 18:07:04 +03:00
|
|
|
serverErr = NewServerError(response)
|
|
|
|
|
2022-10-27 09:28:07 +03:00
|
|
|
assert.IsType(t, new(HTTPClientError), serverErr)
|
2022-10-26 18:07:04 +03:00
|
|
|
assert.Equal(t, serverErr.Error(), marshalError)
|
|
|
|
|
|
|
|
if errors.As(serverErr, &err) {
|
|
|
|
assert.NotNil(t, err.Response)
|
|
|
|
}
|
2022-10-26 10:54:54 +03:00
|
|
|
}
|
2023-12-29 11:37:01 +03:00
|
|
|
|
|
|
|
func TestAsClientError(t *testing.T) {
|
|
|
|
assert.Nil(t, AsClientError(nil))
|
|
|
|
assert.Nil(t, AsClientError(errors.New("arbitrary")))
|
|
|
|
assert.NotNil(t, AsClientError(NewCriticalHTTPError(errors.New("arbitrary"))))
|
|
|
|
}
|