66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package response
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSetAndGetError(t *testing.T) {
|
|
req, err := http.NewRequest("GET", "/test", nil)
|
|
require.NoError(t, err)
|
|
|
|
assert.Nil(t, GetError(req))
|
|
|
|
testErr := errors.New("test error")
|
|
SetError(req, testErr)
|
|
errFromReq := GetError(req)
|
|
require.NotNil(t, errFromReq)
|
|
assert.Equal(t, testErr.Error(), errFromReq.Error())
|
|
}
|
|
|
|
func TestRespondWithJSON(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
payload := map[string]string{"message": "hello"}
|
|
code := http.StatusOK
|
|
|
|
RespondWithJSON(rr, code, payload)
|
|
|
|
assert.Equal(t, code, rr.Code)
|
|
assert.Equal(t, "application/json", rr.Header().Get("Content-Type"))
|
|
|
|
var data map[string]string
|
|
err := json.Unmarshal(rr.Body.Bytes(), &data)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, payload, data)
|
|
}
|
|
|
|
func TestRespondWithError(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
req, err := http.NewRequest("GET", "/test", nil)
|
|
require.NoError(t, err)
|
|
code := http.StatusBadRequest
|
|
message := "error occurred"
|
|
testErr := errors.New("test error")
|
|
|
|
RespondWithError(rr, req, code, message, testErr)
|
|
|
|
errFromReq := GetError(req)
|
|
require.NotNil(t, errFromReq)
|
|
assert.Equal(t, testErr.Error(), errFromReq.Error())
|
|
|
|
assert.Equal(t, code, rr.Code)
|
|
assert.Equal(t, "application/json", rr.Header().Get("Content-Type"))
|
|
|
|
var data map[string]string
|
|
err = json.Unmarshal(rr.Body.Bytes(), &data)
|
|
require.NoError(t, err)
|
|
expected := map[string]string{"error": message}
|
|
assert.Equal(t, expected, data)
|
|
}
|