github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/internal/mysqltest/mysqltest.go (about) 1 package mysqltest 2 3 import ( 4 "context" 5 "database/sql" 6 "testing" 7 8 "github.com/oinume/lekcije/backend/domain/repository" 9 "github.com/oinume/lekcije/backend/infrastructure/mysql" 10 "github.com/oinume/lekcije/backend/model2" 11 ) 12 13 type Repositories struct { 14 sqlDB *sql.DB 15 db repository.DB 16 followingTeacher repository.FollowingTeacher 17 lesson repository.Lesson 18 lessonStatusLog repository.LessonStatusLog 19 notificationTimeSpan repository.NotificationTimeSpan 20 statNotifier repository.StatNotifier 21 teacher repository.Teacher 22 user repository.User 23 userAPIToken repository.UserAPIToken 24 userGoogle repository.UserGoogle 25 } 26 27 func NewRepositories(sqlDB *sql.DB) *Repositories { 28 return &Repositories{ 29 sqlDB: sqlDB, 30 db: mysql.NewDBRepository(sqlDB), 31 followingTeacher: mysql.NewFollowingTeacherRepository(sqlDB), 32 lesson: mysql.NewLessonRepository(sqlDB), 33 lessonStatusLog: mysql.NewLessonStatusLogRepository(sqlDB), 34 notificationTimeSpan: mysql.NewNotificationTimeSpanRepository(sqlDB), 35 statNotifier: mysql.NewStatNotifierRepository(sqlDB), 36 teacher: mysql.NewTeacherRepository(sqlDB), 37 user: mysql.NewUserRepository(sqlDB), 38 userAPIToken: mysql.NewUserAPITokenRepository(sqlDB), 39 userGoogle: mysql.NewUserGoogleRepository(sqlDB), 40 } 41 } 42 43 func (r *Repositories) DB() repository.DB { 44 return r.db 45 } 46 47 func (r *Repositories) FollowingTeacher() repository.FollowingTeacher { 48 return r.followingTeacher 49 } 50 51 func (r *Repositories) Lesson() repository.Lesson { 52 return r.lesson 53 } 54 55 func (r *Repositories) LessonStatusLog() repository.LessonStatusLog { 56 return r.lessonStatusLog 57 } 58 59 func (r *Repositories) NotificationTimeSpan() repository.NotificationTimeSpan { 60 return r.notificationTimeSpan 61 } 62 63 func (r *Repositories) StatNotifier() repository.StatNotifier { 64 return r.statNotifier 65 } 66 67 func (r *Repositories) Teacher() repository.Teacher { 68 return r.teacher 69 } 70 71 func (r *Repositories) User() repository.User { 72 return r.user 73 } 74 75 func (r *Repositories) UserAPIToken() repository.UserAPIToken { 76 return r.userAPIToken 77 } 78 79 func (r *Repositories) UserGoogle() repository.UserGoogle { 80 return r.userGoogle 81 } 82 83 func (r *Repositories) CreateFollowingTeachers(ctx context.Context, t *testing.T, followingTeachers ...*model2.FollowingTeacher) { 84 t.Helper() 85 userIDCheck := make(map[uint]struct{}, len(followingTeachers)) 86 for _, ft := range followingTeachers { 87 userIDCheck[ft.UserID] = struct{}{} 88 } 89 if len(userIDCheck) > 1 { 90 t.Fatal("CreateFollowingTeachers failed because userID in followingTeachers is not same") 91 } 92 for _, ft := range followingTeachers { 93 if err := r.followingTeacher.Create(ctx, ft); err != nil { 94 t.Fatalf("CreateFollowingTeachers failed: %v", err) 95 } 96 } 97 } 98 99 func (r *Repositories) CreateLessons( 100 ctx context.Context, t *testing.T, 101 lessons ...*model2.Lesson, 102 ) { 103 t.Helper() 104 for _, lesson := range lessons { 105 if err := r.lesson.Create(ctx, lesson, false); err != nil { 106 t.Fatalf("CreateLessons failed: %v", err) 107 } 108 } 109 } 110 111 func (r *Repositories) CreateNotificationTimeSpans( 112 ctx context.Context, t *testing.T, 113 timeSpans ...*model2.NotificationTimeSpan, 114 ) { 115 t.Helper() 116 userIDCheck := make(map[uint]struct{}, len(timeSpans)) 117 for _, ts := range timeSpans { 118 userIDCheck[ts.UserID] = struct{}{} 119 } 120 if len(userIDCheck) > 1 { 121 t.Fatal("CreateNotificationTimeSpans failed because userID in timeSpans is not same") 122 } 123 for _, ts := range timeSpans { 124 if err := r.notificationTimeSpan.UpdateAll(ctx, ts.UserID, timeSpans); err != nil { 125 t.Fatalf("CreateNotificationTimeSpans failed: %v", err) 126 } 127 } 128 } 129 130 func (r *Repositories) CreateTeachers(ctx context.Context, t *testing.T, teachers ...*model2.Teacher) { 131 t.Helper() 132 for _, teacher := range teachers { 133 if err := r.teacher.Create(ctx, teacher); err != nil { 134 t.Fatalf("CreateTeachers failed: %v", err) 135 } 136 } 137 } 138 139 func (r *Repositories) CreateUsers(ctx context.Context, t *testing.T, users ...*model2.User) { 140 t.Helper() 141 for _, u := range users { 142 if err := r.user.CreateWithExec(ctx, r.sqlDB, u); err != nil { 143 t.Fatalf("CreateUsers failed: %v", err) 144 } 145 } 146 } 147 148 func (r *Repositories) CreateUserAPITokens(ctx context.Context, t *testing.T, userAPITokens ...*model2.UserAPIToken) { 149 t.Helper() 150 for _, uat := range userAPITokens { 151 if err := r.userAPIToken.Create(ctx, uat); err != nil { 152 t.Fatalf("CreateUserAPITokens failed: %v", err) 153 } 154 } 155 } 156 157 func (r *Repositories) CreateUserGoogles(ctx context.Context, t *testing.T, userGoogles ...*model2.UserGoogle) { 158 t.Helper() 159 for _, ug := range userGoogles { 160 if err := r.userGoogle.CreateWithExec(ctx, r.sqlDB, ug); err != nil { 161 t.Fatalf("CreateUserGoogles failed: %v", err) 162 } 163 } 164 }