user_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package repository
  2. import (
  3. "context"
  4. "github.com/go-nunu/nunu-layout-advanced/internal/repository/admin"
  5. "github.com/go-nunu/nunu-layout-advanced/pkg/log"
  6. "testing"
  7. "time"
  8. "github.com/DATA-DOG/go-sqlmock"
  9. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  10. "github.com/go-nunu/nunu-layout-advanced/internal/repository"
  11. "github.com/stretchr/testify/assert"
  12. "gorm.io/driver/mysql"
  13. "gorm.io/gorm"
  14. )
  15. var logger *log.Logger
  16. func setupRepository(t *testing.T) (admin.UserRepository, sqlmock.Sqlmock) {
  17. mockDB, mock, err := sqlmock.New()
  18. if err != nil {
  19. t.Fatalf("failed to create sqlmock: %v", err)
  20. }
  21. db, err := gorm.Open(mysql.New(mysql.Config{
  22. Conn: mockDB,
  23. SkipInitializeWithVersion: true,
  24. }), &gorm.Config{})
  25. if err != nil {
  26. t.Fatalf("failed to open gorm connection: %v", err)
  27. }
  28. //rdb, _ := redismock.NewClientMock()
  29. repo := repository.NewRepository(logger, db)
  30. userRepo := admin.NewUserRepository(repo)
  31. return userRepo, mock
  32. }
  33. func TestUserRepository_Create(t *testing.T) {
  34. userRepo, mock := setupRepository(t)
  35. ctx := context.Background()
  36. user := &model.User{
  37. Id: 1,
  38. UserId: "123",
  39. Nickname: "Test",
  40. Password: "password",
  41. Email: "test@example.com",
  42. CreatedAt: time.Now(),
  43. UpdatedAt: time.Now(),
  44. }
  45. mock.ExpectBegin()
  46. mock.ExpectExec("INSERT INTO `users`").
  47. WithArgs(user.UserId, user.Nickname, user.Password, user.Email, user.CreatedAt, user.UpdatedAt, user.DeletedAt, user.Id).
  48. WillReturnResult(sqlmock.NewResult(1, 1))
  49. mock.ExpectCommit()
  50. err := userRepo.Create(ctx, user)
  51. assert.NoError(t, err)
  52. assert.NoError(t, mock.ExpectationsWereMet())
  53. }
  54. func TestUserRepository_Update(t *testing.T) {
  55. userRepo, mock := setupRepository(t)
  56. ctx := context.Background()
  57. user := &model.User{
  58. Id: 1,
  59. UserId: "123",
  60. Nickname: "Test",
  61. Password: "password",
  62. Email: "test@example.com",
  63. CreatedAt: time.Now(),
  64. UpdatedAt: time.Now(),
  65. }
  66. mock.ExpectBegin()
  67. mock.ExpectExec("UPDATE `users`").WillReturnResult(sqlmock.NewResult(1, 1))
  68. mock.ExpectCommit()
  69. err := userRepo.Update(ctx, user)
  70. assert.NoError(t, err)
  71. assert.NoError(t, mock.ExpectationsWereMet())
  72. }
  73. func TestUserRepository_GetById(t *testing.T) {
  74. userRepo, mock := setupRepository(t)
  75. ctx := context.Background()
  76. userId := "123"
  77. rows := sqlmock.NewRows([]string{"id", "user_id", "username", "nickname", "password", "email", "created_at", "updated_at"}).
  78. AddRow(1, "123", "test", "Test", "password", "test@example.com", time.Now(), time.Now())
  79. mock.ExpectQuery("SELECT \\* FROM `users`").WillReturnRows(rows)
  80. user, err := userRepo.GetByID(ctx, userId)
  81. assert.NoError(t, err)
  82. assert.NotNil(t, user)
  83. assert.Equal(t, "123", user.UserId)
  84. assert.NoError(t, mock.ExpectationsWereMet())
  85. }
  86. func TestUserRepository_GetByUsername(t *testing.T) {
  87. userRepo, mock := setupRepository(t)
  88. ctx := context.Background()
  89. email := "test@example.com"
  90. rows := sqlmock.NewRows([]string{"id", "user_id", "username", "nickname", "password", "email", "created_at", "updated_at"}).
  91. AddRow(1, "123", "test", "Test", "password", "test@example.com", time.Now(), time.Now())
  92. mock.ExpectQuery("SELECT \\* FROM `users`").WillReturnRows(rows)
  93. user, err := userRepo.GetByEmail(ctx, email)
  94. assert.NoError(t, err)
  95. assert.NotNil(t, user)
  96. assert.Equal(t, "test@example.com", user.Email)
  97. assert.NoError(t, mock.ExpectationsWereMet())
  98. }