package middleware import ( "context" "go.uber.org/mock/gomock" "net/http" "net/http/httptest" "testing" mock_logger "git.urec56.ru/urec/chat_back_go/internal/logger/mocks" ) func TestMiddleware_Log(t *testing.T) { type logBehavior func(l *mock_logger.MockLog, requestID any, method, url string) testTable := []struct { name string requestMethod string requestUrl string requestID any logBehavior logBehavior }{ { name: "ok_1", requestMethod: http.MethodGet, requestUrl: "/users", requestID: 1, logBehavior: func(l *mock_logger.MockLog, requestID any, method, url string) { l.EXPECT().Infof("[%s] \"%s %s\"", requestID, method, url) }, }, { name: "ok_2", requestMethod: http.MethodPost, requestUrl: "/chat", requestID: 10031, logBehavior: func(l *mock_logger.MockLog, requestID any, method, url string) { l.EXPECT().Infof("[%s] \"%s %s\"", requestID, method, url) }, }, { name: "ok_3", requestMethod: http.MethodPost, requestUrl: "/chat", logBehavior: func(l *mock_logger.MockLog, requestID any, method, url string) { l.EXPECT().Infof("[%s] \"%s %s\"", requestID, method, url) }, }, } for _, tc := range testTable { t.Run(tc.name, func(t *testing.T) { c := gomock.NewController(t) defer c.Finish() log := mock_logger.NewMockLog(c) tc.logBehavior(log, tc.requestID, tc.requestMethod, tc.requestUrl) req := httptest.NewRequest(tc.requestMethod, tc.requestUrl, nil) w := httptest.NewRecorder() ctx := req.Context() ctx = context.WithValue(ctx, RequestIDKey, tc.requestID) req = req.WithContext(ctx) m := &Middleware{l: log} server := m.Log(func(w http.ResponseWriter, r *http.Request) {}) server.ServeHTTP(w, req) }) } }