123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- package handler
- import (
- "bytes"
- "encoding/json"
- "flag"
- "fmt"
- v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
- "github.com/go-nunu/nunu-layout-advanced/internal/handler"
- "github.com/go-nunu/nunu-layout-advanced/internal/middleware"
- jwt2 "github.com/go-nunu/nunu-layout-advanced/pkg/jwt"
- "github.com/go-nunu/nunu-layout-advanced/test/mocks/service"
- "time"
- "net/http"
- "net/http/httptest"
- "os"
- "testing"
- "github.com/gin-gonic/gin"
- "github.com/go-nunu/nunu-layout-advanced/pkg/config"
- "github.com/go-nunu/nunu-layout-advanced/pkg/log"
- "github.com/golang/mock/gomock"
- "github.com/stretchr/testify/assert"
- )
- var (
- userId = "xxx"
- )
- var logger *log.Logger
- var hdl *handler.Handler
- var jwt *jwt2.JWT
- var router *gin.Engine
- func TestMain(m *testing.M) {
- fmt.Println("begin")
- err := os.Setenv("APP_CONF", "../../../config/local.yml")
- if err != nil {
- fmt.Println("Setenv error", err)
- }
- var envConf = flag.String("conf", "config/local.yml", "config path, eg: -conf ./config/local.yml")
- flag.Parse()
- conf := config.NewConfig(*envConf)
- logger = log.NewLog(conf)
- hdl = handler.NewHandler(logger)
- jwt = jwt2.NewJwt(conf)
- gin.SetMode(gin.TestMode)
- router = gin.Default()
- router.Use(
- middleware.CORSMiddleware(),
- middleware.ResponseLogMiddleware(logger),
- middleware.RequestLogMiddleware(logger),
- //middleware.SignMiddleware(log),
- )
- code := m.Run()
- fmt.Println("test end")
- os.Exit(code)
- }
- func TestUserHandler_Register(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- params := v1.RegisterRequest{
- Password: "123456",
- Email: "xxx@gmail.com",
- }
- mockUserService := mock_service.NewMockUserService(ctrl)
- mockUserService.EXPECT().Register(gomock.Any(), ¶ms).Return(nil)
- userHandler := handler.NewUserHandler(hdl, mockUserService)
- router.POST("/register", userHandler.Register)
- paramsJson, _ := json.Marshal(params)
- resp := performRequest(router, "POST", "/register", bytes.NewBuffer(paramsJson))
- assert.Equal(t, resp.Code, http.StatusOK)
- // Add assertions for the response body if needed
- }
- func TestUserHandler_Login(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- params := v1.LoginRequest{
- Email: "xxx@gmail.com",
- Password: "123456",
- }
- mockUserService := mock_service.NewMockUserService(ctrl)
- mockUserService.EXPECT().Login(gomock.Any(), ¶ms).Return("", nil)
- userHandler := handler.NewUserHandler(hdl, mockUserService)
- router.POST("/login", userHandler.Login)
- paramsJson, _ := json.Marshal(params)
- resp := performRequest(router, "POST", "/login", bytes.NewBuffer(paramsJson))
- assert.Equal(t, resp.Code, http.StatusOK)
- // Add assertions for the response body if needed
- }
- func TestUserHandler_GetProfile(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockUserService := mock_service.NewMockUserService(ctrl)
- mockUserService.EXPECT().GetProfile(gomock.Any(), userId).Return(&v1.GetProfileResponseData{
- UserId: userId,
- Nickname: "xxxxx",
- }, nil)
- userHandler := handler.NewUserHandler(hdl, mockUserService)
- router.Use(middleware.NoStrictAuth(jwt, logger))
- router.GET("/user", userHandler.GetProfile)
- req, _ := http.NewRequest("GET", "/user", nil)
- req.Header.Set("Authorization", "Bearer "+genToken(t))
- resp := httptest.NewRecorder()
- router.ServeHTTP(resp, req)
- assert.Equal(t, resp.Code, http.StatusOK)
- // Add assertions for the response body if needed
- }
- func TestUserHandler_UpdateProfile(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- params := v1.UpdateProfileRequest{
- Nickname: "alan",
- Email: "alan@gmail.com",
- }
- mockUserService := mock_service.NewMockUserService(ctrl)
- mockUserService.EXPECT().UpdateProfile(gomock.Any(), userId, ¶ms).Return(nil)
- userHandler := handler.NewUserHandler(hdl, mockUserService)
- router.Use(middleware.StrictAuth(jwt, logger))
- router.PUT("/user", userHandler.UpdateProfile)
- paramsJson, _ := json.Marshal(params)
- req, _ := http.NewRequest("PUT", "/user", bytes.NewBuffer(paramsJson))
- req.Header.Set("Authorization", "Bearer "+genToken(t))
- req.Header.Set("Content-Type", "application/json")
- resp := httptest.NewRecorder()
- router.ServeHTTP(resp, req)
- assert.Equal(t, resp.Code, http.StatusOK)
- // Add assertions for the response body if needed
- }
- func performRequest(r http.Handler, method, path string, body *bytes.Buffer) *httptest.ResponseRecorder {
- req, _ := http.NewRequest(method, path, body)
- resp := httptest.NewRecorder()
- r.ServeHTTP(resp, req)
- return resp
- }
- func genToken(t *testing.T) string {
- token, err := jwt.GenToken(userId, time.Now().Add(time.Hour*24*90))
- if err != nil {
- t.Error(err)
- return token
- }
- return token
- }
|