You've already forked agentic-coding-workflow
feat(http): chi router skeleton + Google-style error response
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package httpx
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/yan1h/agent-coding-workflow/internal/infra/errs"
|
||||
)
|
||||
|
||||
func TestWriteJSON(t *testing.T) {
|
||||
rec := httptest.NewRecorder()
|
||||
WriteJSON(rec, 200, map[string]any{"x": 1})
|
||||
require.Equal(t, 200, rec.Code)
|
||||
require.Equal(t, "application/json; charset=utf-8", rec.Header().Get("Content-Type"))
|
||||
|
||||
var body map[string]any
|
||||
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &body))
|
||||
require.EqualValues(t, 1, body["x"])
|
||||
}
|
||||
|
||||
func TestWriteError_AppError(t *testing.T) {
|
||||
rec := httptest.NewRecorder()
|
||||
e := errs.New(errs.CodeInvalidInput, "bad").WithFields(map[string]any{"name": "required"})
|
||||
WriteError(rec, "req-1", e)
|
||||
require.Equal(t, 400, rec.Code)
|
||||
|
||||
var body map[string]any
|
||||
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &body))
|
||||
require.Equal(t, "invalid_input", body["code"])
|
||||
require.Equal(t, "bad", body["message"])
|
||||
require.Equal(t, "req-1", body["request_id"])
|
||||
fields := body["fields"].(map[string]any)
|
||||
require.Equal(t, "required", fields["name"])
|
||||
}
|
||||
|
||||
func TestWriteError_GenericError_BecomesInternal(t *testing.T) {
|
||||
rec := httptest.NewRecorder()
|
||||
WriteError(rec, "req-2", errors.New("boom"))
|
||||
require.Equal(t, 500, rec.Code)
|
||||
|
||||
var body map[string]any
|
||||
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &body))
|
||||
require.Equal(t, "internal", body["code"])
|
||||
require.Equal(t, "internal server error", body["message"])
|
||||
}
|
||||
Reference in New Issue
Block a user