diff --git a/render/render_msgpack_test.go b/render/render_msgpack_test.go index 579897cc..b0eaac1b 100644 --- a/render/render_msgpack_test.go +++ b/render/render_msgpack_test.go @@ -8,6 +8,7 @@ package render import ( "bytes" + "errors" "net/http/httptest" "testing" @@ -16,9 +17,6 @@ import ( "github.com/ugorji/go/codec" ) -// TODO unit tests -// test errors - func TestRenderMsgPack(t *testing.T) { w := httptest.NewRecorder() data := map[string]any{ @@ -42,3 +40,43 @@ func TestRenderMsgPack(t *testing.T) { assert.Equal(t, w.Body.String(), buf.String()) assert.Equal(t, "application/msgpack; charset=utf-8", w.Header().Get("Content-Type")) } + +func TestWriteMsgPack(t *testing.T) { + w := httptest.NewRecorder() + data := map[string]any{ + "foo": "bar", + "num": 42, + } + + err := WriteMsgPack(w, data) + require.NoError(t, err) + + assert.Equal(t, "application/msgpack; charset=utf-8", w.Header().Get("Content-Type")) + + // Verify the encoded data is correct + h := new(codec.MsgpackHandle) + buf := bytes.NewBuffer([]byte{}) + err = codec.NewEncoder(buf, h).Encode(data) + require.NoError(t, err) + + assert.Equal(t, buf.String(), w.Body.String()) +} + +type failWriter struct { + *httptest.ResponseRecorder +} + +func (w *failWriter) Write(data []byte) (int, error) { + return 0, errors.New("write error") +} + +func TestRenderMsgPackError(t *testing.T) { + w := httptest.NewRecorder() + data := map[string]any{ + "foo": "bar", + } + + err := (MsgPack{data}).Render(&failWriter{w}) + require.Error(t, err) + assert.Contains(t, err.Error(), "write error") +}