123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- package service_test
- import (
- "context"
- "errors"
- "flag"
- "fmt"
- v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
- "github.com/go-nunu/nunu-layout-advanced/pkg/jwt"
- "github.com/go-nunu/nunu-layout-advanced/test/mocks/repository"
- "os"
- "testing"
- "github.com/go-nunu/nunu-layout-advanced/internal/model"
- "github.com/go-nunu/nunu-layout-advanced/internal/service"
- "github.com/go-nunu/nunu-layout-advanced/pkg/config"
- "github.com/go-nunu/nunu-layout-advanced/pkg/log"
- "github.com/go-nunu/nunu-layout-advanced/pkg/sid"
- "github.com/golang/mock/gomock"
- "github.com/stretchr/testify/assert"
- "golang.org/x/crypto/bcrypt"
- )
- var (
- logger *log.Logger
- j *jwt.JWT
- sf *sid.Sid
- )
- func TestMain(m *testing.M) {
- fmt.Println("begin")
- err := os.Setenv("APP_CONF", "../../../config/local.yml")
- if err != nil {
- panic(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)
- j = jwt.NewJwt(conf)
- sf = sid.NewSid()
- code := m.Run()
- fmt.Println("test end")
- os.Exit(code)
- }
- func TestUserService_Register(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockUserRepo := mock_repository.NewMockUserRepository(ctrl)
- mockTm := mock_repository.NewMockTransaction(ctrl)
- srv := service.NewService(mockTm, logger, sf, j)
- userService := service.NewUserService(srv, mockUserRepo)
- ctx := context.Background()
- req := &v1.RegisterRequest{
- Password: "password",
- Email: "test@example.com",
- }
- mockUserRepo.EXPECT().GetByEmail(ctx, req.Email).Return(nil, nil)
- mockTm.EXPECT().Transaction(ctx, gomock.Any()).Return(nil)
- err := userService.Register(ctx, req)
- assert.NoError(t, err)
- }
- func TestUserService_Register_UsernameExists(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockUserRepo := mock_repository.NewMockUserRepository(ctrl)
- mockTm := mock_repository.NewMockTransaction(ctrl)
- srv := service.NewService(mockTm, logger, sf, j)
- userService := service.NewUserService(srv, mockUserRepo)
- ctx := context.Background()
- req := &v1.RegisterRequest{
- Password: "password",
- Email: "test@example.com",
- }
- mockUserRepo.EXPECT().GetByEmail(ctx, req.Email).Return(&model.User{}, nil)
- err := userService.Register(ctx, req)
- assert.Error(t, err)
- }
- func TestUserService_Login(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockUserRepo := mock_repository.NewMockUserRepository(ctrl)
- mockTm := mock_repository.NewMockTransaction(ctrl)
- srv := service.NewService(mockTm, logger, sf, j)
- userService := service.NewUserService(srv, mockUserRepo)
- ctx := context.Background()
- req := &v1.LoginRequest{
- Email: "xxx@gmail.com",
- Password: "password",
- }
- hashedPassword, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost)
- if err != nil {
- t.Error("failed to hash password")
- }
- mockUserRepo.EXPECT().GetByEmail(ctx, req.Email).Return(&model.User{
- Password: string(hashedPassword),
- }, nil)
- token, err := userService.Login(ctx, req)
- assert.NoError(t, err)
- assert.NotEmpty(t, token)
- }
- func TestUserService_Login_UserNotFound(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockUserRepo := mock_repository.NewMockUserRepository(ctrl)
- mockTm := mock_repository.NewMockTransaction(ctrl)
- srv := service.NewService(mockTm, logger, sf, j)
- userService := service.NewUserService(srv, mockUserRepo)
- ctx := context.Background()
- req := &v1.LoginRequest{
- Email: "xxx@gmail.com",
- Password: "password",
- }
- mockUserRepo.EXPECT().GetByEmail(ctx, req.Email).Return(nil, errors.New("user not found"))
- _, err := userService.Login(ctx, req)
- assert.Error(t, err)
- }
- func TestUserService_GetProfile(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockUserRepo := mock_repository.NewMockUserRepository(ctrl)
- mockTm := mock_repository.NewMockTransaction(ctrl)
- srv := service.NewService(mockTm, logger, sf, j)
- userService := service.NewUserService(srv, mockUserRepo)
- ctx := context.Background()
- userId := "123"
- mockUserRepo.EXPECT().GetByID(ctx, userId).Return(&model.User{
- UserId: userId,
- Email: "test@example.com",
- }, nil)
- user, err := userService.GetProfile(ctx, userId)
- assert.NoError(t, err)
- assert.Equal(t, userId, user.UserId)
- }
- func TestUserService_UpdateProfile(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockUserRepo := mock_repository.NewMockUserRepository(ctrl)
- mockTm := mock_repository.NewMockTransaction(ctrl)
- srv := service.NewService(mockTm, logger, sf, j)
- userService := service.NewUserService(srv, mockUserRepo)
- ctx := context.Background()
- userId := "123"
- req := &v1.UpdateProfileRequest{
- Nickname: "testuser",
- Email: "test@example.com",
- }
- mockUserRepo.EXPECT().GetByID(ctx, userId).Return(&model.User{
- UserId: userId,
- Email: "old@example.com",
- }, nil)
- mockUserRepo.EXPECT().Update(ctx, gomock.Any()).Return(nil)
- err := userService.UpdateProfile(ctx, userId, req)
- assert.NoError(t, err)
- }
- func TestUserService_UpdateProfile_UserNotFound(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockUserRepo := mock_repository.NewMockUserRepository(ctrl)
- mockTm := mock_repository.NewMockTransaction(ctrl)
- srv := service.NewService(mockTm, logger, sf, j)
- userService := service.NewUserService(srv, mockUserRepo)
- ctx := context.Background()
- userId := "123"
- req := &v1.UpdateProfileRequest{
- Nickname: "testuser",
- Email: "test@example.com",
- }
- mockUserRepo.EXPECT().GetByID(ctx, userId).Return(nil, errors.New("user not found"))
- err := userService.UpdateProfile(ctx, userId, req)
- assert.Error(t, err)
- }
|