279 lines
8.9 KiB
Go
279 lines
8.9 KiB
Go
package timeutils_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"git.bit5.ru/gomodules/timeutils"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestStartOfDay(t *testing.T) {
|
|
cases := []struct {
|
|
now time.Time
|
|
expectedTime time.Time
|
|
}{
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 14, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, timeutils.DefaultLocation),
|
|
expectedTime: time.Date(2023, time.March, 14, 0, 0, 0, 0, timeutils.DefaultLocation),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 0, 0, 0, 0, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 14, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
}
|
|
|
|
for i, c := range cases {
|
|
actualTime := timeutils.StartOfDay(c.now)
|
|
assert.EqualValues(t, c.expectedTime, actualTime, "case #%d", i+1)
|
|
}
|
|
}
|
|
|
|
func TestStartOfPreviousDay(t *testing.T) {
|
|
cases := []struct {
|
|
now time.Time
|
|
expectedTime time.Time
|
|
}{
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, timeutils.DefaultLocation),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, timeutils.DefaultLocation),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 0, 0, 0, 0, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
}
|
|
|
|
for i, c := range cases {
|
|
actualTime := timeutils.StartOfPreviousDay(c.now)
|
|
assert.EqualValues(t, c.expectedTime, actualTime, "case #%d", i+1)
|
|
}
|
|
}
|
|
|
|
func TestStartOfNextDay(t *testing.T) {
|
|
cases := []struct {
|
|
now time.Time
|
|
expectedTime time.Time
|
|
}{
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 15, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, timeutils.DefaultLocation),
|
|
expectedTime: time.Date(2023, time.March, 15, 0, 0, 0, 0, timeutils.DefaultLocation),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 0, 0, 0, 0, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 15, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
}
|
|
|
|
for i, c := range cases {
|
|
actualTime := timeutils.StartOfNextDay(c.now)
|
|
assert.EqualValues(t, c.expectedTime, actualTime, "case #%d", i+1)
|
|
}
|
|
}
|
|
|
|
func TestStartOfWeek(t *testing.T) {
|
|
cases := []struct {
|
|
now time.Time
|
|
expectedTime time.Time
|
|
}{
|
|
{
|
|
now: time.Date(2023, time.March, 13, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 15, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 16, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 17, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 18, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 19, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, timeutils.DefaultLocation),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, timeutils.DefaultLocation),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
}
|
|
|
|
for i, c := range cases {
|
|
actualTime := timeutils.StartOfWeek(c.now)
|
|
assert.EqualValues(t, c.expectedTime, actualTime, "case #%d", i+1)
|
|
}
|
|
}
|
|
|
|
func TestStartOfPreviousWeek(t *testing.T) {
|
|
cases := []struct {
|
|
now time.Time
|
|
expectedTime time.Time
|
|
}{
|
|
{
|
|
now: time.Date(2023, time.March, 13, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 15, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 16, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 17, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 18, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 19, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 6, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.February, 27, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, timeutils.DefaultLocation),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, timeutils.DefaultLocation),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
}
|
|
|
|
for i, c := range cases {
|
|
actualTime := timeutils.StartOfPreviousWeek(c.now)
|
|
assert.EqualValues(t, c.expectedTime, actualTime, "case #%d", i+1)
|
|
}
|
|
}
|
|
|
|
func TestStartOfNextWeek(t *testing.T) {
|
|
cases := []struct {
|
|
now time.Time
|
|
expectedTime time.Time
|
|
}{
|
|
{
|
|
now: time.Date(2023, time.March, 13, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 15, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 16, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 17, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 18, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 19, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.February, 27, 23, 35, 42, 101, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 6, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 14, 23, 35, 42, 101, timeutils.DefaultLocation),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, timeutils.DefaultLocation),
|
|
},
|
|
{
|
|
now: time.Date(2023, time.March, 13, 0, 0, 0, 0, time.UTC),
|
|
expectedTime: time.Date(2023, time.March, 20, 0, 0, 0, 0, time.UTC),
|
|
},
|
|
}
|
|
|
|
for i, c := range cases {
|
|
actualTime := timeutils.StartOfNextWeek(c.now)
|
|
assert.EqualValues(t, c.expectedTime, actualTime, "case #%d", i+1)
|
|
}
|
|
}
|
|
|
|
func TestFormat(t *testing.T) {
|
|
cases := []struct {
|
|
time time.Time
|
|
layout string
|
|
expectedString string
|
|
}{
|
|
{
|
|
time: time.Date(2023, time.March, 13, 23, 35, 42, 101, time.UTC),
|
|
layout: timeutils.DefaultDateLayout,
|
|
expectedString: "2023-03-13",
|
|
},
|
|
{
|
|
time: time.Date(2023, time.March, 13, 23, 35, 42, 101, time.UTC),
|
|
layout: timeutils.DefaultTimeLayout,
|
|
expectedString: "23:35:42",
|
|
},
|
|
{
|
|
time: time.Date(2023, time.March, 13, 23, 35, 42, 101, time.UTC),
|
|
layout: timeutils.DefaultTimeShortLayout,
|
|
expectedString: "23:35",
|
|
},
|
|
{
|
|
time: time.Date(2023, time.March, 13, 23, 35, 42, 101, time.UTC),
|
|
layout: timeutils.DefaultDatetimeLayout,
|
|
expectedString: "2023-03-13 23:35:42",
|
|
},
|
|
{
|
|
time: time.Date(2023, time.March, 13, 23, 35, 42, 101, time.UTC),
|
|
layout: timeutils.DefaultFilenameLayout,
|
|
expectedString: "2023-03-13__23-35-42",
|
|
},
|
|
}
|
|
|
|
for i, c := range cases {
|
|
actualString := c.time.Format(c.layout)
|
|
assert.EqualValues(t, c.expectedString, actualString, "case #%d", i+1)
|
|
}
|
|
}
|