Files
agentic-coding-workflow/internal/transport/http/middleware/logger_test.go
T

49 lines
1.3 KiB
Go

package middleware
import (
"bytes"
"encoding/json"
"log/slog"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
)
func TestLogger_LogsRequest(t *testing.T) {
var buf bytes.Buffer
log := slog.New(slog.NewJSONHandler(&buf, nil))
chain := RequestID(Logger(log)(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNoContent)
})))
rec := httptest.NewRecorder()
chain.ServeHTTP(rec, httptest.NewRequest("GET", "/x", nil))
var line map[string]any
require.NoError(t, json.Unmarshal(buf.Bytes(), &line))
require.Equal(t, "http", line["msg"])
require.Equal(t, "/x", line["path"])
require.Equal(t, "GET", line["method"])
require.EqualValues(t, http.StatusNoContent, line["status"])
require.NotEmpty(t, line["request_id"])
}
func TestLogger_DefaultStatus200(t *testing.T) {
var buf bytes.Buffer
log := slog.New(slog.NewJSONHandler(&buf, nil))
h := Logger(log)(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {
// Handler writes nothing — status should default to 200.
}))
rec := httptest.NewRecorder()
h.ServeHTTP(rec, httptest.NewRequest("GET", "/y", nil))
var line map[string]any
require.NoError(t, json.Unmarshal(buf.Bytes(), &line))
require.EqualValues(t, http.StatusOK, line["status"])
}