// Copyright 2017 The Xorm Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package xorm import ( "errors" "fmt" "testing" "time" "github.com/stretchr/testify/assert" ) type UserCU struct { Id int64 Name string Created time.Time `xorm:"created"` Updated time.Time `xorm:"updated"` } func TestCreatedAndUpdated(t *testing.T) { assert.NoError(t, prepareEngine()) u := new(UserCU) err := testEngine.DropTables(u) if err != nil { t.Error(err) panic(err) } err = testEngine.CreateTables(u) if err != nil { t.Error(err) panic(err) } u.Name = "sss" cnt, err := testEngine.Insert(u) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("insert not returned 1") t.Error(err) panic(err) return } u.Name = "xxx" cnt, err = testEngine.Id(u.Id).Update(u) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("update not returned 1") t.Error(err) panic(err) return } u.Id = 0 u.Created = time.Now().Add(-time.Hour * 24 * 365) u.Updated = u.Created fmt.Println(u) cnt, err = testEngine.NoAutoTime().Insert(u) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("insert not returned 1") t.Error(err) panic(err) return } } type StrangeName struct { Id_t int64 `xorm:"pk autoincr"` Name string } func TestStrangeName(t *testing.T) { assert.NoError(t, prepareEngine()) err := testEngine.DropTables(new(StrangeName)) if err != nil { t.Error(err) } err = testEngine.CreateTables(new(StrangeName)) if err != nil { t.Error(err) } _, err = testEngine.Insert(&StrangeName{Name: "sfsfdsfds"}) if err != nil { t.Error(err) } beans := make([]StrangeName, 0) err = testEngine.Find(&beans) if err != nil { t.Error(err) } } type CreatedUpdated struct { Id int64 Name string Value float64 `xorm:"numeric"` Created time.Time `xorm:"created"` Created2 time.Time `xorm:"created"` Updated time.Time `xorm:"updated"` } func TestCreatedUpdated(t *testing.T) { assert.NoError(t, prepareEngine()) err := testEngine.Sync(&CreatedUpdated{}) if err != nil { t.Error(err) panic(err) } c := &CreatedUpdated{Name: "test"} _, err = testEngine.Insert(c) if err != nil { t.Error(err) panic(err) } c2 := new(CreatedUpdated) has, err := testEngine.Id(c.Id).Get(c2) if err != nil { t.Error(err) panic(err) } if !has { panic(errors.New("no id")) } c2.Value -= 1 _, err = testEngine.Id(c2.Id).Update(c2) if err != nil { t.Error(err) panic(err) } } type Lowercase struct { Id int64 Name string ended int64 `xorm:"-"` } func TestLowerCase(t *testing.T) { assert.NoError(t, prepareEngine()) err := testEngine.Sync(&Lowercase{}) _, err = testEngine.Where("(id) > 0").Delete(&Lowercase{}) if err != nil { t.Error(err) panic(err) } _, err = testEngine.Insert(&Lowercase{ended: 1}) if err != nil { t.Error(err) panic(err) } ls := make([]Lowercase, 0) err = testEngine.Find(&ls) if err != nil { t.Error(err) panic(err) } if len(ls) != 1 { err = errors.New("should be 1") t.Error(err) panic(err) } }