xorm/tests/ydbtest/time_test.go

342 lines
8.8 KiB
Go
Raw Normal View History

package ydb
import (
2023-09-24 10:04:59 +00:00
"database/sql"
"fmt"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestTime(t *testing.T) {
type TestTime struct {
Uuid string `xorm:"pk"`
2023-09-24 10:04:59 +00:00
OperTime sql.NullTime
}
assert.NoError(t, PrepareScheme(&TestTime{}))
engine, err := enginePool.GetDataQueryEngine()
assert.NoError(t, err)
tm := TestTime{
Uuid: "datbeohbb",
2023-09-24 10:04:59 +00:00
OperTime: sql.NullTime{Time: time.Now().In(engine.GetTZLocation()), Valid: true},
}
_, err = engine.Insert(&tm)
assert.NoError(t, err)
var ret TestTime
has, err := engine.Get(&ret)
assert.NoError(t, err)
assert.True(t, has)
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, tm.OperTime.Time.Unix(), ret.OperTime.Time.Unix())
assert.EqualValues(t, tm.OperTime.Time.Format(time.RFC3339), ret.OperTime.Time.Format(time.RFC3339))
}
func TestTimeInDiffLoc(t *testing.T) {
type TestTime struct {
Uuid string `xorm:"pk"`
2023-09-24 10:04:59 +00:00
OperTime *sql.NullTime
}
assert.NoError(t, PrepareScheme(&TestTime{}))
engine, err := enginePool.GetDataQueryEngine()
assert.NoError(t, err)
assert.NotNil(t, engine)
newTzLoc, err := time.LoadLocation("Europe/Berlin")
assert.NoError(t, err)
newDbLoc, err := time.LoadLocation("America/New_York")
assert.NoError(t, err)
oldTzLoc := engine.GetTZLocation()
oldDbLoc := engine.GetTZDatabase()
defer func() {
engine.SetTZLocation(oldTzLoc)
engine.SetTZDatabase(oldDbLoc)
}()
engine.SetTZLocation(newTzLoc)
engine.SetTZDatabase(newDbLoc)
now := time.Now().In(newTzLoc)
tm := TestTime{
Uuid: "datbeohbbh",
2023-09-24 10:04:59 +00:00
OperTime: &sql.NullTime{Time: now, Valid: true},
}
_, err = engine.Insert(&tm)
assert.NoError(t, err)
var ret TestTime
has, err := engine.Get(&ret)
assert.NoError(t, err)
assert.True(t, has)
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, tm.OperTime.Time.Unix(), ret.OperTime.Time.Unix())
assert.EqualValues(t, tm.OperTime.Time.Format(time.RFC3339), ret.OperTime.Time.Format(time.RFC3339))
}
func TestTimeUserCreated(t *testing.T) {
type TestTime struct {
2023-09-24 10:04:59 +00:00
Uuid string `xorm:"pk"`
CreatedAt sql.NullTime
}
assert.NoError(t, PrepareScheme(&TestTime{}))
engine, err := enginePool.GetDataQueryEngine()
assert.NoError(t, err)
assert.NotNil(t, engine)
tm := TestTime{
Uuid: "datbeohbbh",
}
_, err = engine.Insert(&tm)
assert.NoError(t, err)
var ret TestTime
has, err := engine.Get(&ret)
assert.NoError(t, err)
assert.True(t, has)
t.Log(":", tm.CreatedAt)
t.Log(":", ret.CreatedAt)
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, tm.CreatedAt.Time.UnixMicro(), ret.CreatedAt.Time.UnixMicro())
assert.EqualValues(t, tm.CreatedAt.Time.Format(time.RFC3339), ret.CreatedAt.Time.Format(time.RFC3339))
}
func TestTimeUserCreatedDiffLoc(t *testing.T) {
type TestTime struct {
2023-09-24 10:04:59 +00:00
Uuid string `xorm:"pk"`
CreatedAt sql.NullTime
}
assert.NoError(t, PrepareScheme(&TestTime{}))
engine, err := enginePool.GetDataQueryEngine()
assert.NoError(t, err)
assert.NotNil(t, engine)
newTzLoc, err := time.LoadLocation("Asia/Ho_Chi_Minh")
assert.NoError(t, err)
newDbLoc, err := time.LoadLocation("Europe/Berlin")
assert.NoError(t, err)
oldTzLoc := engine.GetTZLocation()
oldDbLoc := engine.GetTZDatabase()
defer func() {
engine.SetTZLocation(oldTzLoc)
engine.SetTZDatabase(oldDbLoc)
}()
engine.SetTZLocation(newTzLoc)
engine.SetTZDatabase(newDbLoc)
tm := TestTime{
Uuid: "datbeohbbh",
}
_, err = engine.Insert(&tm)
assert.NoError(t, err)
ret := TestTime{}
has, err := engine.Get(&ret)
assert.NoError(t, err)
assert.True(t, has)
t.Log(":", tm.CreatedAt)
t.Log(":", ret.CreatedAt)
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, tm.CreatedAt.Time.UnixMicro(), ret.CreatedAt.Time.UnixMicro())
assert.EqualValues(t, tm.CreatedAt.Time.Format(time.RFC3339), ret.CreatedAt.Time.Format(time.RFC3339))
}
func TestTimeUserUpdated(t *testing.T) {
type TestTime struct {
Uuid string `xorm:"pk"`
Count int64
2023-09-24 10:04:59 +00:00
CreatedAt sql.NullTime
UpdatedAt sql.NullTime
}
assert.NoError(t, PrepareScheme(&TestTime{}))
engine, err := enginePool.GetDataQueryEngine()
assert.NoError(t, err)
assert.NotNil(t, engine)
tm := TestTime{
Uuid: "datbeohbbh",
}
_, err = engine.Insert(&tm)
assert.NoError(t, err)
var ret TestTime
has, err := engine.Get(&ret)
assert.NoError(t, err)
assert.True(t, has)
t.Log("created 1:", tm.CreatedAt)
t.Log("updated 1:", tm.UpdatedAt)
t.Log("created 2:", ret.CreatedAt)
t.Log("updated 2:", ret.UpdatedAt)
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, tm.CreatedAt.Time.UnixMicro(), ret.CreatedAt.Time.UnixMicro())
assert.EqualValues(t, tm.UpdatedAt.Time.UnixMicro(), ret.UpdatedAt.Time.UnixMicro())
assert.EqualValues(t, tm.CreatedAt.Time.Format(time.RFC3339), ret.CreatedAt.Time.Format(time.RFC3339))
assert.EqualValues(t, tm.UpdatedAt.Time.Format(time.RFC3339), ret.UpdatedAt.Time.Format(time.RFC3339))
tm2 := TestTime{
CreatedAt: tm.CreatedAt,
}
_, err = engine.Incr("count", int64(1)).Update(&tm2, map[string]interface{}{"uuid": "datbeohbbh"})
assert.NoError(t, err)
ret = TestTime{}
has, err = engine.Get(&ret)
assert.NoError(t, err)
assert.True(t, has)
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, tm2.CreatedAt.Time.UnixMicro(), ret.CreatedAt.Time.UnixMicro())
assert.EqualValues(t, tm2.UpdatedAt.Time.UnixMicro(), ret.UpdatedAt.Time.UnixMicro())
assert.EqualValues(t, tm2.CreatedAt.Time.Format(time.RFC3339), ret.CreatedAt.Time.Format(time.RFC3339))
assert.EqualValues(t, tm2.UpdatedAt.Time.Format(time.RFC3339), ret.UpdatedAt.Time.Format(time.RFC3339))
}
func TestTimeUserUpdatedDiffLoc(t *testing.T) {
type TestTime struct {
Uuid string `xorm:"pk"`
Count int64
2023-09-24 10:04:59 +00:00
CreatedAt sql.NullTime
UpdatedAt sql.NullTime
}
assert.NoError(t, PrepareScheme(&TestTime{}))
engine, err := enginePool.GetDataQueryEngine()
assert.NoError(t, err)
assert.NotNil(t, engine)
newTzLoc, err := time.LoadLocation("Europe/Moscow")
assert.NoError(t, err)
newDbLoc, err := time.LoadLocation("Europe/Berlin")
assert.NoError(t, err)
oldTzLoc := engine.GetTZLocation()
oldDbLoc := engine.GetTZDatabase()
defer func() {
engine.SetTZLocation(oldTzLoc)
engine.SetTZDatabase(oldDbLoc)
}()
engine.SetTZLocation(newTzLoc)
engine.SetTZDatabase(newDbLoc)
tm := TestTime{
Uuid: "datbeohbbh",
}
_, err = engine.Insert(&tm)
assert.NoError(t, err)
var ret TestTime
has, err := engine.Get(&ret)
assert.NoError(t, err)
assert.True(t, has)
t.Log("created 1:", tm.CreatedAt)
t.Log("updated 1:", tm.UpdatedAt)
t.Log("created 2:", ret.CreatedAt)
t.Log("updated 2:", ret.UpdatedAt)
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, tm.CreatedAt.Time.UnixMicro(), ret.CreatedAt.Time.UnixMicro())
assert.EqualValues(t, tm.UpdatedAt.Time.UnixMicro(), ret.UpdatedAt.Time.UnixMicro())
assert.EqualValues(t, tm.CreatedAt.Time.Format(time.RFC3339), ret.CreatedAt.Time.Format(time.RFC3339))
assert.EqualValues(t, tm.UpdatedAt.Time.Format(time.RFC3339), ret.UpdatedAt.Time.Format(time.RFC3339))
tm2 := TestTime{
CreatedAt: tm.CreatedAt,
}
_, err = engine.Incr("count", int64(1)).Update(&tm2, map[string]interface{}{"uuid": "datbeohbbh"})
assert.NoError(t, err)
ret = TestTime{}
has, err = engine.Get(&ret)
assert.NoError(t, err)
assert.True(t, has)
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, tm2.CreatedAt.Time.UnixMicro(), ret.CreatedAt.Time.UnixMicro())
assert.EqualValues(t, tm2.UpdatedAt.Time.UnixMicro(), ret.UpdatedAt.Time.UnixMicro())
assert.EqualValues(t, tm2.CreatedAt.Time.Format(time.RFC3339), ret.CreatedAt.Time.Format(time.RFC3339))
assert.EqualValues(t, tm2.UpdatedAt.Time.Format(time.RFC3339), ret.UpdatedAt.Time.Format(time.RFC3339))
}
func TestFindTimeDiffLoc(t *testing.T) {
type TestTime struct {
2023-09-24 10:04:59 +00:00
Uuid string `xorm:"pk 'uuid'"`
OperTime sql.NullTime `xorm:"'oper_time'"`
}
assert.NoError(t, PrepareScheme(&TestTime{}))
engine, err := enginePool.GetDataQueryEngine()
assert.NoError(t, err)
assert.NotNil(t, engine)
newTzLoc, err := time.LoadLocation("America/New_York")
assert.NoError(t, err)
newDbLoc, err := time.LoadLocation("Europe/Berlin")
assert.NoError(t, err)
oldTzLoc := engine.GetTZLocation()
oldDbLoc := engine.GetTZDatabase()
defer func() {
engine.SetTZLocation(oldTzLoc)
engine.SetTZDatabase(oldDbLoc)
}()
engine.SetTZLocation(newTzLoc)
engine.SetTZDatabase(newDbLoc)
session := engine.NewSession()
defer session.Close()
var (
now = time.Now().In(newTzLoc)
expected = make([]TestTime, 0)
actual = make([]TestTime, 0)
)
for i := 0; i < 10; i++ {
now = now.Add(time.Minute).In(newTzLoc)
data := TestTime{
Uuid: fmt.Sprintf("%d", i),
2023-09-24 10:04:59 +00:00
OperTime: sql.NullTime{Time: now, Valid: true},
}
_, err = session.Insert(&data)
assert.NoError(t, err)
expected = append(expected, data)
}
err = session.Table(&TestTime{}).Asc("oper_time").Find(&actual)
assert.NoError(t, err)
assert.EqualValues(t, len(expected), len(actual))
for i, e := range expected {
2023-09-24 10:04:59 +00:00
assert.EqualValues(t, e.OperTime.Time.Unix(), actual[i].OperTime.Time.Unix())
assert.EqualValues(t, e.OperTime.Time.Format(time.RFC3339), actual[i].OperTime.Time.Format(time.RFC3339))
}
t.Log(expected)
t.Log(actual)
}