func DoTestSaveAndDelete(assert *assrt.Assert, info dialectInfo) { x := time.Now() assert.MustZero(x.Sub(x.UTC())) now := time.Now() mg, q := setupDb(assert, info) type saveModel struct { Id Id A string B int Updated time.Time Created time.Time } model1 := saveModel{ A: "banana", B: 5, } model2 := saveModel{ A: "orange", B: 4, } mg.dropTableIfExists(&model1) mg.CreateTableIfNotExists(&model1) affected, err := q.Save(&model1) assert.MustNil(err) assert.Equal(1, affected) assert.True(model1.Created.Sub(now) > 0) assert.True(model1.Updated.Sub(now) > 0) // make sure created/updated values match the db var model1r []*saveModel err = q.Where("id = ?", model1.Id).FindAll(&model1r) assert.MustNil(err) assert.MustOneLen(model1r) assert.Equal(model1.Created.Unix(), model1r[0].Created.Unix()) assert.Equal(model1.Updated.Unix(), model1r[0].Updated.Unix()) oldCreate := model1.Created oldUpdate := model1.Updated model1.A = "grape" model1.B = 9 time.Sleep(time.Second * 1) // sleep for 1 sec affected, err = q.Save(&model1) assert.MustNil(err) assert.MustEqual(1, affected) assert.True(model1.Created.Equal(oldCreate)) assert.True(model1.Updated.Sub(oldUpdate) > 0) // make sure created/updated values match the db var model1r2 []*saveModel err = q.Where("id = ?", model1.Id).FindAll(&model1r2) assert.MustNil(err) assert.MustOneLen(model1r2) assert.True(model1r2[0].Updated.Sub(model1r2[0].Created) >= 1) assert.Equal(model1.Created.Unix(), model1r2[0].Created.Unix()) assert.Equal(model1.Updated.Unix(), model1r2[0].Updated.Unix()) affected, err = q.Save(&model2) assert.MustNil(err) assert.Equal(1, affected) affected, err = q.Delete(&model2) assert.MustNil(err) assert.Equal(1, affected) }