github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/infrastructure/mysql/user_test.go (about) 1 package mysql_test 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/google/go-cmp/cmp/cmpopts" 9 10 "github.com/oinume/lekcije/backend/infrastructure/mysql" 11 "github.com/oinume/lekcije/backend/internal/assertion" 12 "github.com/oinume/lekcije/backend/internal/modeltest" 13 "github.com/oinume/lekcije/backend/internal/mysqltest" 14 "github.com/oinume/lekcije/backend/model2" 15 ) 16 17 func Test_userRepository_FindAllByEmailVerifiedIsTrue(t *testing.T) { 18 repo := mysql.NewUserRepository(helper.DB(t).DB()) 19 repos := mysqltest.NewRepositories(helper.DB(t).DB()) 20 21 type testCase struct { 22 wantUsers []*model2.User 23 } 24 tests := map[string]struct { 25 setup func(ctx context.Context) *testCase 26 wantErr bool 27 }{ 28 "normal": { 29 setup: func(ctx context.Context) *testCase { 30 helper.TruncateAllTables(t) 31 //boil.DebugMode = true 32 //boil.DebugWriter = os.Stdout 33 user1 := modeltest.NewUser(func(u *model2.User) { 34 u.EmailVerified = 1 35 }) 36 user2 := modeltest.NewUser(func(u *model2.User) { 37 u.EmailVerified = 1 38 }) 39 user3 := modeltest.NewUser(func(u *model2.User) { 40 u.EmailVerified = 1 41 }) 42 repos.CreateUsers(ctx, t, user1, user2, user3) 43 44 ft1 := modeltest.NewFollowingTeacher(func(ft *model2.FollowingTeacher) { 45 ft.UserID = user1.ID 46 }) 47 ft2 := modeltest.NewFollowingTeacher(func(ft *model2.FollowingTeacher) { 48 ft.UserID = user2.ID 49 }) 50 repos.CreateFollowingTeachers(ctx, t, ft1) 51 repos.CreateFollowingTeachers(ctx, t, ft2) 52 53 return &testCase{ 54 wantUsers: []*model2.User{user1, user2}, 55 } 56 }, 57 }, 58 "no email verified users": { 59 setup: func(ctx context.Context) *testCase { 60 helper.TruncateAllTables(t) 61 user1 := modeltest.NewUser(func(u *model2.User) { 62 u.EmailVerified = 0 63 }) 64 repos.CreateUsers(ctx, t, user1) 65 ft1 := modeltest.NewFollowingTeacher(func(ft *model2.FollowingTeacher) { 66 ft.UserID = user1.ID 67 }) 68 repos.CreateFollowingTeachers(ctx, t, ft1) 69 70 return &testCase{ 71 wantUsers: []*model2.User{}, 72 } 73 }, 74 }, 75 } 76 for name, tt := range tests { 77 t.Run(name, func(t *testing.T) { 78 ctx := context.Background() 79 tc := tt.setup(ctx) 80 gotUsers, err := repo.FindAllByEmailVerifiedIsTrue(ctx, 10) 81 if (err != nil) != tt.wantErr { 82 t.Fatalf("FindAllByEmailVerifiedIsTrue: error = %v, wantErr %v", err, tt.wantErr) 83 } 84 85 assertion.AssertEqual(t, len(tc.wantUsers), len(gotUsers), "user length doesn't match") 86 for i := range tc.wantUsers { 87 assertion.AssertEqual(t, tc.wantUsers[i], gotUsers[i], "", cmpopts.EquateApproxTime(10*time.Second)) 88 } 89 }) 90 } 91 }