From da8e7f313308cfdeae3de70fe217ee18f71c6117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Wysoki=C5=84ski?= Date: Fri, 16 Sep 2022 07:52:21 +0200 Subject: [PATCH] refactor --- logger_test.go | 112 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 94 insertions(+), 18 deletions(-) diff --git a/logger_test.go b/logger_test.go index 801f988..ba96100 100644 --- a/logger_test.go +++ b/logger_test.go @@ -16,28 +16,104 @@ import ( func TestLogger(t *testing.T) { t.Parallel() - logger, obs := newLogger() + t.Run("OK: status code=200", func(t *testing.T) { + t.Parallel() - router := chi.NewRouter() - router.Use(chizap.Logger(logger)) - router.Get("/info", func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusOK) - }) - router.Get("/warn", func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusBadRequest) - }) - router.Get("/error", func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusInternalServerError) + logger, obs := newLogger() + + router := chi.NewRouter() + router.Use(chizap.Logger(logger)) + router.Get("/info", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + }) + + req, err := http.NewRequest("GET", "/info?test=true", nil) + assert.NoError(t, err) + router.ServeHTTP(httptest.NewRecorder(), req) + + entries := obs.TakeAll() + require.Len(t, entries, 1) + assert.Equal(t, "/info", entries[0].Message) + assert.Equal(t, zap.InfoLevel, entries[0].Level) }) - res1 := httptest.NewRecorder() - req1, err := http.NewRequest("GET", "/info?test=true", nil) - assert.NoError(t, err) - router.ServeHTTP(res1, req1) + t.Run("OK: status code=400", func(t *testing.T) { + t.Parallel() - entries1 := obs.TakeAll() - require.Len(t, entries1, 1) - assert.Equal(t, "/info", entries1[0].Message) + logger, obs := newLogger() + + router := chi.NewRouter() + router.Use(chizap.Logger(logger)) + router.Get("/warn", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusBadRequest) + }) + + req, err := http.NewRequest("GET", "/warn", nil) + assert.NoError(t, err) + router.ServeHTTP(httptest.NewRecorder(), req) + + entries := obs.TakeAll() + require.Len(t, entries, 1) + assert.Equal(t, "/warn", entries[0].Message) + assert.Equal(t, zap.WarnLevel, entries[0].Level) + }) + + t.Run("OK: status code=500", func(t *testing.T) { + t.Parallel() + + logger, obs := newLogger() + + router := chi.NewRouter() + router.Use(chizap.Logger(logger)) + router.Get("/error", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + }) + + req, err := http.NewRequest("GET", "/error", nil) + assert.NoError(t, err) + router.ServeHTTP(httptest.NewRecorder(), req) + + entries := obs.TakeAll() + require.Len(t, entries, 1) + assert.Equal(t, "/error", entries[0].Message) + assert.Equal(t, zap.ErrorLevel, entries[0].Level) + }) + + t.Run("OK: path should be skipped", func(t *testing.T) { + t.Parallel() + + logger, obs := newLogger() + + router := chi.NewRouter() + router.Use(chizap.Logger( + logger, + chizap.WithFilter(func(r *http.Request) bool { + return r.URL.Path != "/anythingelse" + }), + chizap.WithFilter(func(r *http.Request) bool { + return r.URL.Path != "/error" + }), + )) + router.Get("/error", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + }) + router.Get("/success", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + }) + + req1, err := http.NewRequest("GET", "/error", nil) + assert.NoError(t, err) + router.ServeHTTP(httptest.NewRecorder(), req1) + + req2, err := http.NewRequest("GET", "/success", nil) + assert.NoError(t, err) + router.ServeHTTP(httptest.NewRecorder(), req2) + + entries := obs.TakeAll() + require.Len(t, entries, 1) + assert.Equal(t, "/success", entries[0].Message) + assert.Equal(t, zap.InfoLevel, entries[0].Level) + }) } func newLogger() (*zap.Logger, *observer.ObservedLogs) {