Files
goyco/internal/middleware/logging_test.go

58 lines
1.5 KiB
Go

package middleware
import (
"bytes"
"log"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestLoggingRecordsStatusAndLogs(t *testing.T) {
originalOutput := log.Writer()
defer log.SetOutput(originalOutput)
var buf bytes.Buffer
log.SetOutput(&buf)
handler := Logging(true)(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated)
_, _ = w.Write([]byte("ok"))
}))
recorder := httptest.NewRecorder()
request := httptest.NewRequest(http.MethodGet, "/logging-test", nil)
request.Header.Set("User-Agent", "test-agent")
handler.ServeHTTP(recorder, request)
if recorder.Result().StatusCode != http.StatusCreated {
t.Fatalf("expected status 201, got %d", recorder.Result().StatusCode)
}
logLine := buf.String()
if !strings.Contains(logLine, "GET /logging-test 201") {
t.Fatalf("expected log line to contain method, path and status, got %q", logLine)
}
if !strings.Contains(logLine, "test-agent") {
t.Fatalf("expected log line to contain user agent, got %q", logLine)
}
}
func TestResponseWriterWriteHeaderStoresStatus(t *testing.T) {
recorder := httptest.NewRecorder()
wrapped := &responseWriter{ResponseWriter: recorder, statusCode: http.StatusOK}
wrapped.WriteHeader(http.StatusAccepted)
if wrapped.statusCode != http.StatusAccepted {
t.Fatalf("expected stored status 202, got %d", wrapped.statusCode)
}
if recorder.Result().StatusCode != http.StatusAccepted {
t.Fatalf("expected underlying writer to receive 202, got %d", recorder.Result().StatusCode)
}
}