2023-09-01 15:06:41 +00:00
|
|
|
package ydb
|
|
|
|
|
|
|
|
import (
|
2023-09-24 10:04:59 +00:00
|
|
|
"database/sql"
|
2023-09-01 15:06:41 +00:00
|
|
|
"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
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
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},
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_, 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))
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTimeInDiffLoc(t *testing.T) {
|
|
|
|
type TestTime struct {
|
|
|
|
Uuid string `xorm:"pk"`
|
2023-09-24 10:04:59 +00:00
|
|
|
OperTime *sql.NullTime
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
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},
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_, 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))
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTimeUserCreated(t *testing.T) {
|
|
|
|
type TestTime struct {
|
2023-09-24 10:04:59 +00:00
|
|
|
Uuid string `xorm:"pk"`
|
|
|
|
CreatedAt sql.NullTime
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
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))
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestTimeUserCreatedDiffLoc(t *testing.T) {
|
|
|
|
type TestTime struct {
|
2023-09-24 10:04:59 +00:00
|
|
|
Uuid string `xorm:"pk"`
|
|
|
|
CreatedAt sql.NullTime
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
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))
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
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))
|
2023-09-01 15:06:41 +00:00
|
|
|
|
|
|
|
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))
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
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))
|
2023-09-01 15:06:41 +00:00
|
|
|
|
|
|
|
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))
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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'"`
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
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},
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
_, 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))
|
2023-09-01 15:06:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
t.Log(expected)
|
|
|
|
t.Log(actual)
|
|
|
|
}
|