(Feat): Initial Commit
This commit is contained in:
139
internal/test/helper_request.go
Normal file
139
internal/test/helper_request.go
Normal file
@@ -0,0 +1,139 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
|
||||
"allaboutapps.dev/aw/go-starter/internal/api"
|
||||
"github.com/go-openapi/runtime"
|
||||
"github.com/go-openapi/strfmt"
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
type GenericPayload map[string]interface{}
|
||||
type GenericArrayPayload []interface{}
|
||||
|
||||
func (g GenericPayload) Reader(t TestingT) *bytes.Reader {
|
||||
t.Helper()
|
||||
|
||||
b, err := json.Marshal(g)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to serialize payload: %v", err)
|
||||
}
|
||||
|
||||
return bytes.NewReader(b)
|
||||
}
|
||||
|
||||
func (g GenericArrayPayload) Reader(t TestingT) *bytes.Reader {
|
||||
t.Helper()
|
||||
|
||||
b, err := json.Marshal(g)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to serialize payload: %v", err)
|
||||
}
|
||||
|
||||
return bytes.NewReader(b)
|
||||
}
|
||||
|
||||
func PerformRequestWithParams(t TestingT, s *api.Server, method string, path string, body GenericPayload, headers http.Header, queryParams map[string]string) *httptest.ResponseRecorder {
|
||||
t.Helper()
|
||||
|
||||
if body == nil {
|
||||
return PerformRequestWithRawBody(t, s, method, path, nil, headers, queryParams)
|
||||
}
|
||||
|
||||
return PerformRequestWithRawBody(t, s, method, path, body.Reader(t), headers, queryParams)
|
||||
}
|
||||
|
||||
func PerformRequestWithArrayAndParams(t TestingT, s *api.Server, method string, path string, body GenericArrayPayload, headers http.Header, queryParams map[string]string) *httptest.ResponseRecorder {
|
||||
t.Helper()
|
||||
|
||||
if body == nil {
|
||||
return PerformRequestWithRawBody(t, s, method, path, nil, headers, queryParams)
|
||||
}
|
||||
|
||||
return PerformRequestWithRawBody(t, s, method, path, body.Reader(t), headers, queryParams)
|
||||
}
|
||||
|
||||
func PerformRequestWithRawBody(t TestingT, s *api.Server, method string, path string, body io.Reader, headers http.Header, queryParams map[string]string) *httptest.ResponseRecorder {
|
||||
t.Helper()
|
||||
|
||||
req := httptest.NewRequest(method, path, body)
|
||||
|
||||
if headers != nil {
|
||||
req.Header = headers
|
||||
}
|
||||
if body != nil && len(req.Header.Get(echo.HeaderContentType)) == 0 {
|
||||
req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON)
|
||||
}
|
||||
|
||||
if queryParams != nil {
|
||||
q := req.URL.Query()
|
||||
for k, v := range queryParams {
|
||||
q.Add(k, v)
|
||||
}
|
||||
|
||||
req.URL.RawQuery = q.Encode()
|
||||
}
|
||||
|
||||
res := httptest.NewRecorder()
|
||||
|
||||
s.Echo.ServeHTTP(res, req)
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
func PerformRequest(t TestingT, s *api.Server, method string, path string, body GenericPayload, headers http.Header) *httptest.ResponseRecorder {
|
||||
t.Helper()
|
||||
|
||||
return PerformRequestWithParams(t, s, method, path, body, headers, nil)
|
||||
}
|
||||
|
||||
func PerformRequestWithArray(t TestingT, s *api.Server, method string, path string, body GenericArrayPayload, headers http.Header) *httptest.ResponseRecorder {
|
||||
t.Helper()
|
||||
|
||||
return PerformRequestWithArrayAndParams(t, s, method, path, body, headers, nil)
|
||||
}
|
||||
|
||||
func ParseResponseBody(t TestingT, res *httptest.ResponseRecorder, v interface{}) {
|
||||
t.Helper()
|
||||
|
||||
if err := json.NewDecoder(res.Result().Body).Decode(&v); err != nil {
|
||||
t.Fatalf("Failed to parse response body: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func ParseResponseAndValidate(t TestingT, res *httptest.ResponseRecorder, v runtime.Validatable) {
|
||||
t.Helper()
|
||||
|
||||
ParseResponseBody(t, res, &v)
|
||||
|
||||
if err := v.Validate(strfmt.Default); err != nil {
|
||||
t.Fatalf("Failed to validate response: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func HeadersWithAuth(t TestingT, token string) http.Header {
|
||||
t.Helper()
|
||||
|
||||
return HeadersWithConfigurableAuth(t, "Bearer", token)
|
||||
}
|
||||
|
||||
func HeadersWithConfigurableAuth(t TestingT, scheme string, token string) http.Header {
|
||||
t.Helper()
|
||||
|
||||
headers := http.Header{}
|
||||
headers.Set(echo.HeaderAuthorization, fmt.Sprintf("%s %s", scheme, token))
|
||||
|
||||
return headers
|
||||
}
|
||||
|
||||
func HeadersWithAPIKeyAuth(t TestingT, token string) http.Header {
|
||||
t.Helper()
|
||||
|
||||
return HeadersWithConfigurableAuth(t, "APIKey", token)
|
||||
}
|
||||
Reference in New Issue
Block a user