timeutils/timeutils_test.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)
}
}