func TestScan(t *testing.T) { user1 := User{Name: "ScanUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "ScanUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "ScanUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) type result struct { Name string Age int } var res result DB.Table("users").Select("name, age").Where("name = ?", user3.Name).Scan(&res) if res.Name != user3.Name { t.Errorf("Scan into struct should work") } var doubleAgeRes result DB.Table("users").Select("age + age as age").Where("name = ?", user3.Name).Scan(&doubleAgeRes) if doubleAgeRes.Age != res.Age*2 { t.Errorf("Scan double age as age") } var ress []result DB.Table("users").Select("name, age").Where("name in (?)", []string{user2.Name, user3.Name}).Scan(&ress) if len(ress) != 2 || ress[0].Name != user2.Name || ress[1].Name != user3.Name { t.Errorf("Scan into struct map") } }
func TestRaw(t *testing.T) { user1 := User{Name: "ExecRawSqlUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "ExecRawSqlUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "ExecRawSqlUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) type result struct { Name string Email string } var ress []result DB.Raw("SELECT name, age FROM users WHERE name = ? or name = ?", user2.Name, user3.Name).Scan(&ress) if len(ress) != 2 || ress[0].Name != user2.Name || ress[1].Name != user3.Name { t.Errorf("Raw with scan") } rows, _ := DB.Raw("select name, age from users where name = ?", user3.Name).Rows() count := 0 for rows.Next() { count++ } if count != 1 { t.Errorf("Raw with Rows should find one record with name 3") } DB.Exec("update users set name=? where name in (?)", "jinzhu", []string{user1.Name, user2.Name, user3.Name}) if DB.Where("name in (?)", []string{user1.Name, user2.Name, user3.Name}).First(&User{}).Error != gorm.RecordNotFound { t.Error("Raw sql to update records") } }
func TestSearchWithMap(t *testing.T) { user1 := User{Name: "MapSearchUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "MapSearchUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "MapSearchUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) var user User DB.First(&user, map[string]interface{}{"name": user1.Name}) if user.Id == 0 || user.Name != user1.Name { t.Errorf("Search first record with inline map") } user = User{} DB.Where(map[string]interface{}{"name": user2.Name}).First(&user) if user.Id == 0 || user.Name != user2.Name { t.Errorf("Search first record with where map") } var users []User DB.Where(map[string]interface{}{"name": user3.Name}).Find(&users) if len(users) != 1 { t.Errorf("Search all records with inline map") } users = []User{} DB.Find(&users, map[string]interface{}{"name": user3.Name}) if len(users) != 1 { t.Errorf("Search all records with inline map") } }
func TestScanRows(t *testing.T) { user1 := User{Name: "ScanRowsUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "ScanRowsUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "ScanRowsUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) rows, err := DB.Table("users").Where("name = ? or name = ?", user2.Name, user3.Name).Select("name, age").Rows() if err != nil { t.Errorf("Not error should happen, got %v", err) } type Result struct { Name string Age int } var results []Result for rows.Next() { var result Result if err := DB.ScanRows(rows, &result); err != nil { t.Errorf("should get no error, but got %v", err) } results = append(results, result) } if !reflect.DeepEqual(results, []Result{{Name: "ScanRowsUser2", Age: 10}, {Name: "ScanRowsUser3", Age: 20}}) { t.Errorf("Should find expected results") } }
func TestRow(t *testing.T) { user1 := User{Name: "RowUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "RowUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "RowUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) row := DB.Table("users").Where("name = ?", user2.Name).Select("age").Row() var age int64 row.Scan(&age) if age != 10 { t.Errorf("Scan with Row") } }
func main() { manualCorrection, _ := strconv.Atoi(os.Getenv("CORRECTION")) c := cron.New() c.AddFunc("0 35 13 * * *", func() { fmt.Println("Determine timeout") duration, err := determineTimeout(200, time.Millisecond*50) if err != nil { log.Fatal(err) return } startTime := now.MustParse("13:37:00").Add(-(*duration)).Add(time.Millisecond * time.Duration(manualCorrection)) <-time.After(startTime.Sub(time.Now())) gorequest.New().Post(URL).Type("form").Send(requestBody{ Action: "new", Data: os.Getenv("USERNAME"), }).End() fmt.Println("Posted!") }) c.Start() fmt.Printf("1337 Bot cron started at %s\n", time.Now()) // Never quit... select {} }
func TestSearchWithStruct(t *testing.T) { user1 := User{Name: "StructSearchUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "StructSearchUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "StructSearchUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) if DB.Where(user1.Id).First(&User{}).RecordNotFound() { t.Errorf("Search with primary key") } if DB.First(&User{}, user1.Id).RecordNotFound() { t.Errorf("Search with primary key as inline condition") } if DB.First(&User{}, fmt.Sprintf("%v", user1.Id)).RecordNotFound() { t.Errorf("Search with primary key as inline condition") } var users []User DB.Where([]int64{user1.Id, user2.Id, user3.Id}).Find(&users) if len(users) != 3 { t.Errorf("Should found 3 users when search with primary keys, but got %v", len(users)) } var user User DB.First(&user, &User{Name: user1.Name}) if user.Id == 0 || user.Name != user1.Name { t.Errorf("Search first record with inline pointer of struct") } DB.First(&user, User{Name: user1.Name}) if user.Id == 0 || user.Name != user.Name { t.Errorf("Search first record with inline struct") } DB.Where(&User{Name: user1.Name}).First(&user) if user.Id == 0 || user.Name != user1.Name { t.Errorf("Search first record with where struct") } users = []User{} DB.Find(&users, &User{Name: user2.Name}) if len(users) != 1 { t.Errorf("Search all records with inline struct") } }
func TestSearchWithMap(t *testing.T) { companyID := 1 user1 := User{Name: "MapSearchUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "MapSearchUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "MapSearchUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} user4 := User{Name: "MapSearchUser4", Age: 30, Birthday: now.MustParse("2020-1-1"), CompanyID: &companyID} DB.Save(&user1).Save(&user2).Save(&user3).Save(&user4) var user User DB.First(&user, map[string]interface{}{"name": user1.Name}) if user.Id == 0 || user.Name != user1.Name { t.Errorf("Search first record with inline map") } user = User{} DB.Where(map[string]interface{}{"name": user2.Name}).First(&user) if user.Id == 0 || user.Name != user2.Name { t.Errorf("Search first record with where map") } var users []User DB.Where(map[string]interface{}{"name": user3.Name}).Find(&users) if len(users) != 1 { t.Errorf("Search all records with inline map") } DB.Find(&users, map[string]interface{}{"name": user3.Name}) if len(users) != 1 { t.Errorf("Search all records with inline map") } DB.Find(&users, map[string]interface{}{"name": user4.Name, "company_id": nil}) if len(users) != 0 { t.Errorf("Search all records with inline map containing null value finding 0 records") } DB.Find(&users, map[string]interface{}{"name": user1.Name, "company_id": nil}) if len(users) != 1 { t.Errorf("Search all records with inline map containing null value finding 1 record") } DB.Find(&users, map[string]interface{}{"name": user4.Name, "company_id": companyID}) if len(users) != 1 { t.Errorf("Search all records with inline multiple value map") } }
func TestSearchWithEmptyChain(t *testing.T) { user1 := User{Name: "ChainSearchUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "ChainearchUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "ChainearchUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) if DB.Where("").Where("").First(&User{}).Error != nil { t.Errorf("Should not raise any error if searching with empty strings") } if DB.Where(&User{}).Where("name = ?", user1.Name).First(&User{}).Error != nil { t.Errorf("Should not raise any error if searching with empty struct") } if DB.Where(map[string]interface{}{}).Where("name = ?", user1.Name).First(&User{}).Error != nil { t.Errorf("Should not raise any error if searching with empty map") } }
func init() { runtime.GOMAXPROCS(runtime.NumCPU()) flag.Usage = func() { fmt.Fprintf(os.Stderr, `Usage $ %s [OPTIONS] Options `, os.Args[0]) flag.PrintDefaults() os.Exit(0) } from := flag.String("from", time.Now().Format(timeFormat), "From time (default: Current time)") to := flag.String("to", time.Now().Add(24*time.Hour).Format(timeFormat), "To time (default: After 1 day since current time)") flag.Parse() fromTime = now.MustParse(*from) toTime = now.MustParse(*to) }
func TestRows(t *testing.T) { user1 := User{Name: "RowsUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "RowsUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "RowsUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) rows, err := DB.Table("users").Where("name = ? or name = ?", user2.Name, user3.Name).Select("name, age").Rows() if err != nil { t.Errorf("Not error should happen, but got") } count := 0 for rows.Next() { var name string var age int64 rows.Scan(&name, &age) count++ } if count != 2 { t.Errorf("Should found two records with name 3") } }
func TestSearchWithPlainSQL(t *testing.T) { user1 := User{Name: "PlainSqlUser1", Age: 1, Birthday: now.MustParse("2000-1-1")} user2 := User{Name: "PlainSqlUser2", Age: 10, Birthday: now.MustParse("2010-1-1")} user3 := User{Name: "PlainSqlUser3", Age: 20, Birthday: now.MustParse("2020-1-1")} DB.Save(&user1).Save(&user2).Save(&user3) scopedb := DB.Where("name LIKE ?", "%PlainSqlUser%") if DB.Where("name = ?", user1.Name).First(&User{}).RecordNotFound() { t.Errorf("Search with plain SQL") } if DB.Where("name LIKE ?", "%"+user1.Name+"%").First(&User{}).RecordNotFound() { t.Errorf("Search with plan SQL (regexp)") } var users []User DB.Find(&users, "name LIKE ? and age > ?", "%PlainSqlUser%", 1) if len(users) != 2 { t.Errorf("Should found 2 users that age > 1, but got %v", len(users)) } users = []User{} DB.Where("name LIKE ?", "%PlainSqlUser%").Where("age >= ?", 1).Find(&users) if len(users) != 3 { t.Errorf("Should found 3 users that age >= 1, but got %v", len(users)) } users = []User{} scopedb.Where("age <> ?", 20).Find(&users) if len(users) != 2 { t.Errorf("Should found 2 users age != 20, but got %v", len(users)) } users = []User{} scopedb.Where("birthday > ?", now.MustParse("2000-1-1")).Find(&users) if len(users) != 2 { t.Errorf("Should found 2 users's birthday > 2000-1-1, but got %v", len(users)) } users = []User{} scopedb.Where("birthday > ?", "2002-10-10").Find(&users) if len(users) != 2 { t.Errorf("Should found 2 users's birthday >= 2002-10-10, but got %v", len(users)) } users = []User{} scopedb.Where("birthday >= ?", "2010-1-1").Where("birthday < ?", "2020-1-1").Find(&users) if len(users) != 1 { t.Errorf("Should found 1 users's birthday < 2020-1-1 and >= 2010-1-1, but got %v", len(users)) } users = []User{} DB.Where("name in (?)", []string{user1.Name, user2.Name}).Find(&users) if len(users) != 2 { t.Errorf("Should found 2 users, but got %v", len(users)) } users = []User{} DB.Where("id in (?)", []int64{user1.Id, user2.Id, user3.Id}).Find(&users) if len(users) != 3 { t.Errorf("Should found 3 users, but got %v", len(users)) } users = []User{} DB.Where("id in (?)", user1.Id).Find(&users) if len(users) != 1 { t.Errorf("Should found 1 users, but got %v", len(users)) } if !DB.Where("name = ?", "none existing").Find(&[]User{}).RecordNotFound() { t.Errorf("Should get RecordNotFound error when looking for none existing records") } }
func parseTime(str string) *time.Time { t := now.MustParse(str) return &t }