Files
goext/sq/converterDefault_test.go
T
Mikescher 02d6894ec6
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m34s
[🤖] Add Unit-Tests
2026-04-27 16:31:29 +02:00

200 lines
6.1 KiB
Go

package sq
import (
"git.blackforestbytes.com/BlackForestBytes/goext/rfctime"
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
"testing"
"time"
)
func TestConverterBoolToBit(t *testing.T) {
v, err := ConverterBoolToBit.ModelToDB(true)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, int64(1), v.(int64))
v, err = ConverterBoolToBit.ModelToDB(false)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, int64(0), v.(int64))
v, err = ConverterBoolToBit.DBToModel(int64(1))
tst.AssertNoErr(t, err)
tst.AssertEqual(t, true, v.(bool))
v, err = ConverterBoolToBit.DBToModel(int64(0))
tst.AssertNoErr(t, err)
tst.AssertEqual(t, false, v.(bool))
_, err = ConverterBoolToBit.DBToModel(int64(2))
if err == nil {
t.Fatal("expected error for value not in {0,1}")
}
}
func TestConverterTimeToUnixMillis(t *testing.T) {
t0 := time.Date(2024, 6, 15, 12, 34, 56, int(789*time.Millisecond), time.UTC)
expected := t0.UnixMilli()
v, err := ConverterTimeToUnixMillis.ModelToDB(t0)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, expected, v.(int64))
v, err = ConverterTimeToUnixMillis.DBToModel(expected)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, expected, v.(time.Time).UnixMilli())
}
func TestConverterRFCUnixMilliTime(t *testing.T) {
t0 := rfctime.NewUnixMilli(time.Date(2020, 1, 2, 3, 4, 5, 0, time.UTC))
expected := t0.UnixMilli()
v, err := ConverterRFCUnixMilliTimeToUnixMillis.ModelToDB(t0)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, expected, v.(int64))
v, err = ConverterRFCUnixMilliTimeToUnixMillis.DBToModel(expected)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, expected, v.(rfctime.UnixMilliTime).UnixMilli())
}
func TestConverterRFCUnixNanoTime(t *testing.T) {
t0 := rfctime.NewUnixNano(time.Date(2020, 1, 2, 3, 4, 5, 123456789, time.UTC))
expected := t0.UnixNano()
v, err := ConverterRFCUnixNanoTimeToUnixNanos.ModelToDB(t0)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, expected, v.(int64))
v, err = ConverterRFCUnixNanoTimeToUnixNanos.DBToModel(expected)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, expected, v.(rfctime.UnixNanoTime).UnixNano())
}
func TestConverterRFCUnixTime(t *testing.T) {
t0 := rfctime.NewUnix(time.Date(2020, 1, 2, 3, 4, 5, 0, time.UTC))
expected := t0.Unix()
v, err := ConverterRFCUnixTimeToUnixSeconds.ModelToDB(t0)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, expected, v.(int64))
v, err = ConverterRFCUnixTimeToUnixSeconds.DBToModel(expected)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, expected, v.(rfctime.UnixTime).Unix())
}
func TestConverterRFC339Time(t *testing.T) {
t0 := rfctime.NewRFC3339(time.Date(2020, 6, 15, 9, 30, 45, 0, time.UTC))
v, err := ConverterRFC339TimeToString.ModelToDB(t0)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, "2020-06-15 09:30:45", v.(string))
v, err = ConverterRFC339TimeToString.DBToModel("2020-06-15 09:30:45")
tst.AssertNoErr(t, err)
tt := v.(rfctime.RFC3339Time).Time().UTC()
tst.AssertEqual(t, 2020, tt.Year())
tst.AssertEqual(t, time.June, tt.Month())
tst.AssertEqual(t, 15, tt.Day())
tst.AssertEqual(t, 9, tt.Hour())
tst.AssertEqual(t, 30, tt.Minute())
tst.AssertEqual(t, 45, tt.Second())
_, err = ConverterRFC339TimeToString.DBToModel("garbage")
if err == nil {
t.Fatal("expected parse error")
}
}
func TestConverterRFC339NanoTime(t *testing.T) {
t0 := rfctime.NewRFC3339Nano(time.Date(2020, 6, 15, 9, 30, 45, 123456789, time.UTC))
v, err := ConverterRFC339NanoTimeToString.ModelToDB(t0)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, "2020-06-15 09:30:45.123456789", v.(string))
v, err = ConverterRFC339NanoTimeToString.DBToModel("2020-06-15 09:30:45.123456789")
tst.AssertNoErr(t, err)
tt := v.(rfctime.RFC3339NanoTime).Time().UTC()
tst.AssertEqual(t, 123456789, tt.Nanosecond())
_, err = ConverterRFC339NanoTimeToString.DBToModel("not a date")
if err == nil {
t.Fatal("expected parse error")
}
}
func TestConverterRFCDate(t *testing.T) {
d := rfctime.Date{Year: 2024, Month: 3, Day: 9}
v, err := ConverterRFCDateToString.ModelToDB(d)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, "2024-03-09", v.(string))
v, err = ConverterRFCDateToString.DBToModel("2024-03-09")
tst.AssertNoErr(t, err)
d2 := v.(rfctime.Date)
tst.AssertEqual(t, 2024, d2.Year)
tst.AssertEqual(t, 3, d2.Month)
tst.AssertEqual(t, 9, d2.Day)
_, err = ConverterRFCDateToString.DBToModel("invalid")
if err == nil {
t.Fatal("expected parse error")
}
}
func TestConverterRFCTime(t *testing.T) {
tm := rfctime.NewTime(13, 30, 45, 0)
v, err := ConverterRFCTimeToString.ModelToDB(tm)
tst.AssertNoErr(t, err)
roundtrip, err := ConverterRFCTimeToString.DBToModel(v.(string))
tst.AssertNoErr(t, err)
tm2 := roundtrip.(rfctime.Time)
tst.AssertEqual(t, 13, tm2.Hour)
tst.AssertEqual(t, 30, tm2.Minute)
tst.AssertEqual(t, 45, tm2.Second)
_, err = ConverterRFCTimeToString.DBToModel("xx:xx:xx")
if err == nil {
t.Fatal("expected parse error")
}
}
func TestConverterRFCSecondsF64(t *testing.T) {
d := 12*time.Second + 500*time.Millisecond
s := rfctime.NewSecondsF64(d)
v, err := ConverterRFCSecondsF64ToString.ModelToDB(s)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, 12.5, v.(float64))
v, err = ConverterRFCSecondsF64ToString.DBToModel(12.5)
tst.AssertNoErr(t, err)
tst.AssertEqual(t, 12.5, v.(rfctime.SecondsF64).Seconds())
}
func TestConverterJsonObjToString(t *testing.T) {
tst.AssertEqual(t, "sq.JsonObj", ConverterJsonObjToString.ModelTypeString())
tst.AssertEqual(t, "string", ConverterJsonObjToString.DBTypeString())
v, err := ConverterJsonObjToString.ModelToDB(JsonObj{"x": float64(1)})
tst.AssertNoErr(t, err)
tst.AssertEqual(t, `{"x":1}`, v.(string))
r, err := ConverterJsonObjToString.DBToModel(`{"x":1}`)
tst.AssertNoErr(t, err)
tst.AssertStrRepEqual(t, r.(JsonObj)["x"], float64(1))
}
func TestConverterJsonArrToString(t *testing.T) {
tst.AssertEqual(t, "sq.JsonArr", ConverterJsonArrToString.ModelTypeString())
tst.AssertEqual(t, "string", ConverterJsonArrToString.DBTypeString())
v, err := ConverterJsonArrToString.ModelToDB(JsonArr{float64(1), float64(2)})
tst.AssertNoErr(t, err)
tst.AssertEqual(t, `[1,2]`, v.(string))
r, err := ConverterJsonArrToString.DBToModel(`[1,2]`)
tst.AssertNoErr(t, err)
arr := r.(JsonArr)
tst.AssertEqual(t, 2, len(arr))
}