(Feat): Initial Commit
Some checks failed
Build & Test / build-test (push) Has been cancelled
Build & Test / swagger-codegen-cli (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled

This commit is contained in:
2026-07-03 19:41:31 +05:30
commit 7e940c83a7
461 changed files with 45002 additions and 0 deletions

174
internal/util/time_test.go Normal file
View File

@@ -0,0 +1,174 @@
package util_test
import (
"testing"
"time"
"allaboutapps.dev/aw/go-starter/internal/util"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestStartOfMonth(t *testing.T) {
d := util.Date(2020, 3, 12, time.UTC)
expected := time.Date(2020, 3, 1, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfMonth(d))
d = util.Date(2020, 12, 35, time.UTC)
expected = time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfMonth(d))
}
func TestTimeFromString(t *testing.T) {
expected := time.Date(2020, 3, 29, 12, 34, 54, 0, time.UTC)
d, err := util.TimeFromString("2020-03-29T12:34:54Z")
require.NoError(t, err)
assert.Equal(t, expected, d)
}
func TestStartOfQuarter(t *testing.T) {
d := util.Date(2020, 3, 31, time.UTC)
expected := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfQuarter(d))
d = util.Date(2020, 1, 1, time.UTC)
expected = time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfQuarter(d))
d = util.Date(2020, 12, 1, time.UTC)
expected = time.Date(2020, 10, 1, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfQuarter(d))
d = util.Date(2020, 12, 35, time.UTC)
expected = time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfQuarter(d))
d = util.Date(2020, 4, 1, time.UTC)
expected = time.Date(2020, 4, 1, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfQuarter(d))
}
func TestStartOfWeek(t *testing.T) {
d := util.Date(2020, 3, 12, time.UTC)
expected := time.Date(2020, 3, 9, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfWeek(d))
d = util.Date(2020, 6, 15, time.UTC)
expected = time.Date(2020, 6, 15, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfWeek(d))
d = util.Date(2020, 6, 21, time.UTC)
expected = time.Date(2020, 6, 15, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.StartOfWeek(d))
}
func TestDateFromString(t *testing.T) {
res, err := util.DateFromString("2020-01-03")
require.NoError(t, err)
require.True(t, res.Equal(time.Date(2020, 1, 3, 0, 0, 0, 0, time.UTC)))
res, err = util.DateFromString("2020-xx-03")
require.Error(t, err)
assert.Empty(t, res)
}
func TestEndOfMonth(t *testing.T) {
d := util.Date(2020, 3, 12, time.UTC)
expected := time.Date(2020, 3, 31, 23, 59, 59, 999999999, time.UTC)
assert.True(t, expected.Equal(util.EndOfMonth(d)))
d = util.Date(2020, 12, 35, time.UTC)
expected = time.Date(2021, 1, 31, 23, 59, 59, 999999999, time.UTC)
res := util.EndOfMonth(d)
assert.True(t, expected.Equal(res))
expected = time.Date(2021, 1, 31, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.TruncateTime(res))
}
func TestEndOfPreviousMonth(t *testing.T) {
d := util.Date(2020, 3, 12, time.UTC)
expected := time.Date(2020, 2, 29, 23, 59, 59, 999999999, time.UTC)
assert.True(t, expected.Equal(util.EndOfPreviousMonth(d)))
d = util.Date(2020, 12, 35, time.UTC)
expected = time.Date(2020, 12, 31, 23, 59, 59, 999999999, time.UTC)
res := util.EndOfPreviousMonth(d)
assert.True(t, expected.Equal(res))
expected = time.Date(2020, 12, 31, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.TruncateTime(res))
}
func TestStartOfDay(t *testing.T) {
d := time.Date(2020, 3, 12, 23, 59, 59, 999999999, time.UTC)
expected := util.Date(2020, 3, 12, time.UTC)
assert.True(t, expected.Equal(util.StartOfDay(d)))
d = time.Date(2021, 1, 4, 23, 59, 59, 999999999, time.UTC)
expected = util.Date(2020, 12, 35, time.UTC)
res := util.StartOfDay(d)
assert.True(t, expected.Equal(res))
}
func TestEndOfDay(t *testing.T) {
d := util.Date(2020, 3, 12, time.UTC)
expected := time.Date(2020, 3, 12, 23, 59, 59, 999999999, time.UTC)
assert.True(t, expected.Equal(util.EndOfDay(d)))
d = util.Date(2020, 12, 35, time.UTC)
expected = time.Date(2021, 1, 4, 23, 59, 59, 999999999, time.UTC)
res := util.EndOfDay(d)
assert.True(t, expected.Equal(res))
expected = time.Date(2021, 1, 4, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.TruncateTime(res))
}
func TestDateAdds(t *testing.T) {
d := util.Date(2020, 3, 12, time.UTC)
expected := time.Date(2022, 4, 12, 0, 0, 0, 0, time.UTC)
res := util.AddMonths(d, 25)
assert.True(t, expected.Equal(res))
d = util.Date(2020, 1, 30, time.UTC)
expected = time.Date(2020, 3, 1, 0, 0, 0, 0, time.UTC)
res = util.AddMonths(d, 1)
assert.True(t, expected.Equal(res))
d = util.Date(2020, 1, 30, time.UTC)
expected = time.Date(2020, 3, 5, 0, 0, 0, 0, time.UTC)
res = util.AddWeeks(d, 5)
assert.True(t, expected.Equal(res))
}
func TestDayBefore(t *testing.T) {
d := util.Date(2020, 3, 1, time.UTC)
expected := time.Date(2020, 2, 29, 23, 59, 59, 999999999, time.UTC)
res := util.DayBefore(d)
assert.True(t, expected.Equal(res))
expected = time.Date(2020, 2, 29, 0, 0, 0, 0, time.UTC)
assert.Equal(t, expected, util.TruncateTime(res))
}
func TestMaxTime(t *testing.T) {
a := time.Date(2022, 4, 12, 0, 0, 0, 1, time.UTC)
b := time.Date(2022, 4, 12, 0, 0, 0, 2, time.UTC)
c := time.Date(2022, 4, 12, 0, 0, 0, 0, time.UTC)
latestTime := util.MaxTime(a, b, c)
assert.Equal(t, b, latestTime)
}
func TestNonZeroTimeOrNil(t *testing.T) {
d := time.Time{}
res := util.NonZeroTimeOrNil(d)
assert.Empty(t, res)
d = util.Date(2021, 7, 2, time.UTC)
res = util.NonZeroTimeOrNil(d)
assert.Equal(t, &d, res)
}