package middleware import "bytes" import "context" import "net/http" import "net/http/httptest" import "strings" import "testing" import "codit/internal/models" import "codit/internal/util" func TestAccessLogWritesRecord(t *testing.T) { var buf bytes.Buffer var logger *util.Logger var handler http.Handler var req *http.Request var recorder *httptest.ResponseRecorder var user models.User var ctx context.Context logger = util.NewLogger("test", &buf, util.LOG_ALL) defer logger.Close() handler = AccessLog(logger, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusCreated) })) user = models.User{ID: "u1", Username: "alice"} ctx = context.WithValue(context.Background(), userKey, user) req = httptest.NewRequest(http.MethodPost, "/api/demo", nil).WithContext(ctx) recorder = httptest.NewRecorder() handler.ServeHTTP(recorder, req) logger.Close() if recorder.Code != http.StatusCreated { t.Fatalf("unexpected status: %d", recorder.Code) } if !strings.Contains(buf.String(), "path=/api/demo") { t.Fatalf("missing path in log: %s", buf.String()) } if !strings.Contains(buf.String(), "user=alice") { t.Fatalf("missing username in log: %s", buf.String()) } }