// Copyright (c) 2022 Gitpod GmbH. All rights reserved. // Licensed under the GNU Affero General Public License (AGPL). // See License-AGPL.txt in the project root for license information. package dbtest import ( "testing" "time" db "github.com/gitpod-io/gitpod/components/gitpod-db/go" "github.com/google/uuid" "github.com/stretchr/testify/require" "gorm.io/gorm" ) type User struct { ID uuid.UUID `gorm:"primary_key;column:id;type:char;size:36;"` AvatarURL string `gorm:"column:avatarUrl;type:char;size:255;"` Name string `gorm:"column:name;type:char;size:255;"` FullName string `gorm:"column:fullName;type:char;size:255;"` CreationDate db.VarcharTime `gorm:"column:creationDate;type:varchar;size:255;"` // user has more field but we don't care here as they are just used in tests. } func (user *User) TableName() string { return "d_b_user" } func NewUser(t *testing.T, user User) User { t.Helper() result := User{ ID: uuid.New(), AvatarURL: "https://avatars.githubusercontent.com/u/9071", Name: "HomerJSimpson", FullName: "Homer Simpson", CreationDate: db.NewVarCharTime(time.Now()), } if user.ID != uuid.Nil { result.ID = user.ID } if user.AvatarURL != "" { result.AvatarURL = user.AvatarURL } if user.Name != "" { result.Name = user.Name } if user.FullName != "" { result.FullName = user.FullName } return result } func CreatUser(t *testing.T, conn *gorm.DB, user ...User) []User { t.Helper() var records []User var ids []uuid.UUID for _, u := range user { record := NewUser(t, u) records = append(records, record) ids = append(ids, record.ID) } require.NoError(t, conn.CreateInBatches(&records, 1000).Error) t.Cleanup(func() { require.NoError(t, conn.Where(ids).Delete(&User{}).Error) }) return records }