Files
ezbookkeeping/pkg/utils/datetimes_test.go
T
2025-07-06 20:02:09 +08:00

460 lines
15 KiB
Go

package utils
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/mayswind/ezbookkeeping/pkg/errs"
)
func TestParseNumericYearMonth(t *testing.T) {
expectedYear := int32(2024)
expectedMonth := int32(3)
actualYear, actualMonth, err := ParseNumericYearMonth("2024-03")
assert.Equal(t, nil, err)
assert.Equal(t, expectedYear, actualYear)
assert.Equal(t, expectedMonth, actualMonth)
}
func TestFormatUnixTimeToLongDate(t *testing.T) {
unixTime := int64(1617228083)
utcTimezone := time.FixedZone("Test Timezone", 0) // UTC
utc8Timezone := time.FixedZone("Test Timezone", 28800) // UTC+8
expectedValue := "2021-03-31"
actualValue := FormatUnixTimeToLongDate(unixTime, utcTimezone)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "2021-04-01"
actualValue = FormatUnixTimeToLongDate(unixTime, utc8Timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatUnixTimeToLongDateTimeWithTimezone(t *testing.T) {
unixTime := int64(1617228083)
utcTimezone := time.FixedZone("Test Timezone", 0) // UTC
utc8Timezone := time.FixedZone("Test Timezone", 28800) // UTC+8
expectedValue := "2021-03-31 22:01:23Z"
actualValue := FormatUnixTimeToLongDateTimeWithTimezone(unixTime, utcTimezone)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "2021-04-01 06:01:23+08:00"
actualValue = FormatUnixTimeToLongDateTimeWithTimezone(unixTime, utc8Timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatUnixTimeToLongDateTimeWithTimezoneRFC3339Format(t *testing.T) {
unixTime := int64(1617228083)
utcTimezone := time.FixedZone("Test Timezone", 0) // UTC
utc8Timezone := time.FixedZone("Test Timezone", 28800) // UTC+8
expectedValue := "2021-03-31T22:01:23Z"
actualValue := FormatUnixTimeToLongDateTimeWithTimezoneRFC3339Format(unixTime, utcTimezone)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "2021-04-01T06:01:23+08:00"
actualValue = FormatUnixTimeToLongDateTimeWithTimezoneRFC3339Format(unixTime, utc8Timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatUnixTimeToLongDateTime(t *testing.T) {
unixTime := int64(1617228083)
utcTimezone := time.FixedZone("Test Timezone", 0) // UTC
utc8Timezone := time.FixedZone("Test Timezone", 28800) // UTC+8
expectedValue := "2021-03-31 22:01:23"
actualValue := FormatUnixTimeToLongDateTime(unixTime, utcTimezone)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "2021-04-01 06:01:23"
actualValue = FormatUnixTimeToLongDateTime(unixTime, utc8Timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatYearMonthDayToLongDateTime(t *testing.T) {
expectedValue := "2025-06-01 00:00:00"
actualValue, err := FormatYearMonthDayToLongDateTime("25", "06", "01")
assert.Nil(t, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "2025-06-01 00:00:00"
actualValue, err = FormatYearMonthDayToLongDateTime("25", "6", "1")
assert.Nil(t, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "1990-06-01 00:00:00"
actualValue, err = FormatYearMonthDayToLongDateTime("90", "06", "01")
assert.Nil(t, err)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatUnixTimeToLongDateTimeWithoutSecond(t *testing.T) {
unixTime := int64(1617228083)
utcTimezone := time.FixedZone("Test Timezone", 0) // UTC
utc8Timezone := time.FixedZone("Test Timezone", 28800) // UTC+8
expectedValue := "2021-03-31 22:01"
actualValue := FormatUnixTimeToLongDateTimeWithoutSecond(unixTime, utcTimezone)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "2021-04-01 06:01"
actualValue = FormatUnixTimeToLongDateTimeWithoutSecond(unixTime, utc8Timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatUnixTimeToYearMonth(t *testing.T) {
unixTime := int64(1617228083)
utcTimezone := time.FixedZone("Test Timezone", 0) // UTC
utc8Timezone := time.FixedZone("Test Timezone", 28800) // UTC+8
expectedValue := "2021-03"
actualValue := FormatUnixTimeToYearMonth(unixTime, utcTimezone)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "2021-04"
actualValue = FormatUnixTimeToYearMonth(unixTime, utc8Timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatUnixTimeToNumericYearMonth(t *testing.T) {
unixTime := int64(1617228083)
utcTimezone := time.FixedZone("Test Timezone", 0) // UTC
utc8Timezone := time.FixedZone("Test Timezone", 28800) // UTC+8
expectedValue := int32(202103)
actualValue := FormatUnixTimeToNumericYearMonth(unixTime, utcTimezone)
assert.Equal(t, expectedValue, actualValue)
expectedValue = int32(202104)
actualValue = FormatUnixTimeToNumericYearMonth(unixTime, utc8Timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatUnixTimeToNumericLocalDateTime(t *testing.T) {
unixTime := int64(1617228083)
utcTimezone := time.FixedZone("Test Timezone", 0) // UTC
utc8Timezone := time.FixedZone("Test Timezone", 28800) // UTC+8
expectedValue := int64(20210331220123)
actualValue := FormatUnixTimeToNumericLocalDateTime(unixTime, utcTimezone)
assert.Equal(t, expectedValue, actualValue)
expectedValue = int64(20210401060123)
actualValue = FormatUnixTimeToNumericLocalDateTime(unixTime, utc8Timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestGetMinUnixTimeWithSameLocalDateTime(t *testing.T) {
expectedValue := int64(1690797600)
actualValue := GetMinUnixTimeWithSameLocalDateTime(1690819200, 480)
assert.Equal(t, expectedValue, actualValue)
actualValue = GetMinUnixTimeWithSameLocalDateTime(1690873200, -420)
assert.Equal(t, expectedValue, actualValue)
}
func TestGetMaxUnixTimeWithSameLocalDateTime(t *testing.T) {
expectedValue := int64(1690891200)
actualValue := GetMaxUnixTimeWithSameLocalDateTime(1690819200, 480)
assert.Equal(t, expectedValue, actualValue)
actualValue = GetMaxUnixTimeWithSameLocalDateTime(1690873200, -420)
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateFirstTime(t *testing.T) {
expectedValue := int64(1690819200)
actualTime, err := ParseFromLongDateFirstTime("2023-08-01", 480)
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateLastTime(t *testing.T) {
expectedValue := int64(1690905599)
actualTime, err := ParseFromLongDateLastTime("2023-08-01", 480)
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateTimeToMinUnixTime(t *testing.T) {
expectedValue := int64(1690797600)
actualTime, err := ParseFromLongDateTimeToMinUnixTime("2023-08-01 00:00:00")
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateTimeToMaxUnixTime(t *testing.T) {
expectedValue := int64(1690891200)
actualTime, err := ParseFromLongDateTimeToMaxUnixTime("2023-08-01 00:00:00")
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateTime(t *testing.T) {
expectedValue := int64(1617228083)
actualTime, err := ParseFromLongDateTime("2021-04-01 06:01:23", 480)
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateTimeWithTimezone(t *testing.T) {
expectedValue := int64(1617238883)
actualTime, err := ParseFromLongDateTimeWithTimezone("2021-04-01 06:01:23+05:00")
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateTimeWithTimezone2(t *testing.T) {
expectedValue := int64(1617238883)
actualTime, err := ParseFromLongDateTimeWithTimezone2("2021-04-01 06:01:23 +0500")
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateTimeWithTimezoneRFC3339Format(t *testing.T) {
expectedValue := int64(1617238883)
actualTime, err := ParseFromLongDateTimeWithTimezoneRFC3339Format("2021-04-01T06:01:23+05:00")
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromLongDateTimeWithoutSecond(t *testing.T) {
expectedValue := int64(1691947440)
actualTime, err := ParseFromLongDateTimeWithoutSecond("2023-08-13 17:24", 0)
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromShortDateTime(t *testing.T) {
expectedValue := int64(1617228083)
actualTime, err := ParseFromShortDateTime("2021-4-1 6:1:23", 480)
assert.Equal(t, nil, err)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromElapsedSeconds(t *testing.T) {
expectedValue := "00:00:00"
actualValue, err := ParseFromElapsedSeconds(0)
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "00:00:09"
actualValue, err = ParseFromElapsedSeconds(9)
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "00:01:08"
actualValue, err = ParseFromElapsedSeconds(68)
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "01:00:07"
actualValue, err = ParseFromElapsedSeconds(3607)
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "23:59:59"
actualValue, err = ParseFromElapsedSeconds(86399)
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
}
func TestParseFromElapsedSeconds_InvalidTime(t *testing.T) {
_, err := ParseFromElapsedSeconds(-1)
assert.NotEqual(t, nil, err)
_, err = ParseFromElapsedSeconds(86400)
assert.NotEqual(t, nil, err)
}
func TestIsUnixTimeEqualsYearAndMonth(t *testing.T) {
actualValue := IsUnixTimeEqualsYearAndMonth(1691947440, time.UTC, 2023, 8)
assert.Equal(t, true, actualValue)
actualValue = IsUnixTimeEqualsYearAndMonth(1690847999, time.UTC, 2023, 8)
assert.Equal(t, false, actualValue)
}
func TestGetTimezoneOffsetMinutes(t *testing.T) {
timezone := time.FixedZone("Test Timezone", 120*60)
expectedValue := int16(120)
actualValue := GetTimezoneOffsetMinutes(timezone)
assert.Equal(t, expectedValue, actualValue)
timezone = time.FixedZone("Test Timezone", 345*60)
expectedValue = int16(345)
actualValue = GetTimezoneOffsetMinutes(timezone)
assert.Equal(t, expectedValue, actualValue)
timezone = time.FixedZone("Test Timezone", -720*60)
expectedValue = int16(-720)
actualValue = GetTimezoneOffsetMinutes(timezone)
assert.Equal(t, expectedValue, actualValue)
timezone = time.FixedZone("Test Timezone", 0)
expectedValue = int16(0)
actualValue = GetTimezoneOffsetMinutes(timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatTimezoneOffset(t *testing.T) {
timezone := time.FixedZone("Test Timezone", 120*60)
expectedValue := "+02:00"
actualValue := FormatTimezoneOffset(timezone)
assert.Equal(t, expectedValue, actualValue)
timezone = time.FixedZone("Test Timezone", 345*60)
expectedValue = "+05:45"
actualValue = FormatTimezoneOffset(timezone)
assert.Equal(t, expectedValue, actualValue)
timezone = time.FixedZone("Test Timezone", -720*60)
expectedValue = "-12:00"
actualValue = FormatTimezoneOffset(timezone)
assert.Equal(t, expectedValue, actualValue)
timezone = time.FixedZone("Test Timezone", -150*60)
expectedValue = "-02:30"
actualValue = FormatTimezoneOffset(timezone)
assert.Equal(t, expectedValue, actualValue)
timezone = time.FixedZone("Test Timezone", 0)
expectedValue = "+00:00"
actualValue = FormatTimezoneOffset(timezone)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatTimezoneOffsetFromHoursOffset(t *testing.T) {
expectedValue := "+02:00"
actualValue, err := FormatTimezoneOffsetFromHoursOffset("2")
assert.Nil(t, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "+05:45"
actualValue, err = FormatTimezoneOffsetFromHoursOffset("+5.75")
assert.Nil(t, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "-12:00"
actualValue, err = FormatTimezoneOffsetFromHoursOffset("-12.00")
assert.Nil(t, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "-02:30"
actualValue, err = FormatTimezoneOffsetFromHoursOffset("-2.5")
assert.Nil(t, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = "+00:00"
actualValue, err = FormatTimezoneOffsetFromHoursOffset("0")
assert.Nil(t, err)
assert.Equal(t, expectedValue, actualValue)
}
func TestFormatTimezoneOffsetFromHoursOffset_InvalidHoursOffset(t *testing.T) {
_, err := FormatTimezoneOffsetFromHoursOffset("")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
_, err = FormatTimezoneOffsetFromHoursOffset("+")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
_, err = FormatTimezoneOffsetFromHoursOffset("-")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
_, err = FormatTimezoneOffsetFromHoursOffset("a")
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
}
func TestParseFromTimezoneOffset(t *testing.T) {
expectedValue := time.FixedZone("Timezone", 120*60)
actualValue, err := ParseFromTimezoneOffset("+02:00")
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = time.FixedZone("Timezone", 345*60)
actualValue, err = ParseFromTimezoneOffset("+05:45")
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = time.FixedZone("Timezone", -720*60)
actualValue, err = ParseFromTimezoneOffset("-12:00")
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = time.FixedZone("Timezone", -150*60)
actualValue, err = ParseFromTimezoneOffset("-02:30")
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
expectedValue = time.FixedZone("Timezone", 0)
actualValue, err = ParseFromTimezoneOffset("+00:00")
assert.Equal(t, nil, err)
assert.Equal(t, expectedValue, actualValue)
actualValue, err = ParseFromTimezoneOffset("00:00")
assert.NotEqual(t, nil, err)
actualValue, err = ParseFromTimezoneOffset("0")
assert.NotEqual(t, nil, err)
actualValue, err = ParseFromTimezoneOffset("1000")
assert.NotEqual(t, nil, err)
}
func TestGetMinTransactionTimeFromUnixTime(t *testing.T) {
expectedValue := int64(1617228083000)
actualValue := GetMinTransactionTimeFromUnixTime(1617228083)
assert.Equal(t, expectedValue, actualValue)
}
func TestGetMaxTransactionTimeFromUnixTime(t *testing.T) {
expectedValue := int64(1617228083999)
actualValue := GetMaxTransactionTimeFromUnixTime(1617228083)
assert.Equal(t, expectedValue, actualValue)
}
func TestGetUnixTimeFromTransactionTime(t *testing.T) {
expectedValue := int64(1617228083)
actualValue := GetUnixTimeFromTransactionTime(1617228083999)
assert.Equal(t, expectedValue, actualValue)
}
func TestGetTransactionTimeRangeByYearMonth(t *testing.T) {
expectedMinValue := int64(1704016800000)
expectedMaxValue := int64(1706788799999)
actualMinValue, actualMaxValue, err := GetTransactionTimeRangeByYearMonth(2024, 1)
assert.Equal(t, nil, err)
assert.Equal(t, expectedMinValue, actualMinValue)
assert.Equal(t, expectedMaxValue, actualMaxValue)
}
func TestParseFromUnixTime(t *testing.T) {
expectedValue := int64(1617228083)
actualTime := parseFromUnixTime(expectedValue)
actualValue := actualTime.Unix()
assert.Equal(t, expectedValue, actualValue)
}