chat_back_go/internal/transport/rest/middleware/log_test.go

72 lines
1.8 KiB
Go

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)
})
}
}