github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/middlewares/middlewares_test.go (about)

     1  package middlewares_test
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"net/http"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/ngocphuongnb/tetua/app/config"
    11  	"github.com/ngocphuongnb/tetua/app/logger"
    12  	"github.com/ngocphuongnb/tetua/app/middlewares"
    13  	"github.com/ngocphuongnb/tetua/app/mock"
    14  	"github.com/ngocphuongnb/tetua/app/server"
    15  	fiber "github.com/ngocphuongnb/tetua/packages/fiberserver"
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func TestCookieMiddleware(t *testing.T) {
    20  	mockServer := mock.CreateServer()
    21  	mockServer.Use(middlewares.Cookie)
    22  	mockServer.Get("/test", func(c server.Context) error {
    23  		return c.SendString("ok")
    24  	})
    25  	body, resp := mock.GetRequest(mockServer, "/test")
    26  	assert.Equal(t, "ok", string(body))
    27  	assert.Equal(t, true, strings.HasPrefix(resp.Header["Set-Cookie"][0], config.COOKIE_UUID+"="))
    28  }
    29  
    30  func TestRecoverMiddleware(t *testing.T) {
    31  	mockLogger := mock.CreateLogger(true)
    32  	mockServer := mock.CreateServer()
    33  	mockServer.Use(middlewares.Recover)
    34  	mockServer.Get("/test", func(c server.Context) error {
    35  		panic("test recover")
    36  	})
    37  	body, _ := mock.GetRequest(mockServer, "/test")
    38  	assert.Equal(t, `{"error":"test recover"}`, body)
    39  	param0Str := fmt.Sprintf("%v", mockLogger.Last().Params[0])
    40  	assert.Equal(t, true, strings.HasPrefix(param0Str, "test recover goroutine"))
    41  }
    42  
    43  func TestRecoverMiddlewareResponseError(t *testing.T) {
    44  	mockLogger := mock.CreateLogger(true)
    45  	mockServer := fiber.New(fiber.Config{
    46  		JwtSigningKey: "sesj5JYrRxrB2yUWkBFM7KKWCY2ykxBw",
    47  		JSONEncoder: func(v interface{}) ([]byte, error) {
    48  			return nil, errors.New("json error")
    49  		},
    50  	})
    51  
    52  	mockServer.Use(middlewares.Recover)
    53  	mockServer.Get("/test", func(c server.Context) error {
    54  		panic("test recover")
    55  	})
    56  	mock.GetRequest(mockServer, "/test")
    57  	assert.Equal(t, errors.New("json error"), mockLogger.Last().Params[0])
    58  }
    59  
    60  func TestRequestIDMiddlewares(t *testing.T) {
    61  	mockServer := mock.CreateServer()
    62  	mockServer.Use(middlewares.RequestID)
    63  	mockServer.Get("/test", func(c server.Context) error {
    64  		assert.Equal(t, true, c.RequestID() != "")
    65  		return c.SendString("ok")
    66  	})
    67  	mockServer.Get("/test2", func(c server.Context) error {
    68  		assert.Equal(t, "my-request-id", c.RequestID())
    69  		return c.SendString("ok")
    70  	})
    71  
    72  	_, resp := mock.GetRequest(mockServer, "/test")
    73  	assert.Equal(t, true, resp.Header["X-Request-Id"][0] != "")
    74  
    75  	_, resp = mock.GetRequest(mockServer, "/test2", map[string]string{
    76  		middlewares.HEADER_REQUEST_ID: "my-request-id",
    77  	})
    78  	assert.Equal(t, "my-request-id", resp.Header["X-Request-Id"][0])
    79  }
    80  
    81  func TestRequestLogMiddlewares(t *testing.T) {
    82  	mockLogger := mock.CreateLogger(true)
    83  	mockServer := mock.CreateServer()
    84  	mockServer.Use(middlewares.RequestLog)
    85  	mockServer.Get("/test", func(c server.Context) error {
    86  		c.Status(http.StatusBadRequest)
    87  		return errors.New("Test request error")
    88  	})
    89  
    90  	mock.GetRequest(mockServer, "/test")
    91  
    92  	msg := mockLogger.Last().Params[0]
    93  	ctx, ok := mockLogger.Last().Params[1].(logger.Context)
    94  
    95  	assert.Equal(t, true, ok)
    96  	assert.Equal(t, "Request completed", msg)
    97  	assert.Equal(t, http.StatusBadRequest, ctx["status"])
    98  	assert.Equal(t, "GET", ctx["method"])
    99  	assert.Equal(t, "/test", ctx["path"])
   100  	assert.Equal(t, "0.0.0.0", ctx["ip"])
   101  	assert.Equal(t, "Test request error", ctx["error"])
   102  	assert.Equal(t, true, ctx["latency"] != "")
   103  }
   104  
   105  func TestGetAllMiddlewares(t *testing.T) {
   106  	assert.Equal(t, 6, len(middlewares.All()))
   107  }