2023-12-22 01:12:34 +00:00
|
|
|
package utility_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"code.nonshy.com/nonshy/website/pkg/utility"
|
|
|
|
)
|
|
|
|
|
2024-10-06 03:24:45 +00:00
|
|
|
func TestNextMonth(t *testing.T) {
|
|
|
|
var tests = []struct {
|
|
|
|
Now string
|
|
|
|
Day int
|
|
|
|
Expect string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
Now: "1995-08-01",
|
|
|
|
Day: 15,
|
|
|
|
Expect: "1995-09-15",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Now: "2006-12-15",
|
|
|
|
Day: 11,
|
|
|
|
Expect: "2007-01-11",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Now: "2006-12-01",
|
|
|
|
Day: 15,
|
|
|
|
Expect: "2007-01-15",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Now: "2007-01-15",
|
|
|
|
Day: 29, // no leap day
|
|
|
|
Expect: "2007-03-01",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Now: "2004-01-08",
|
|
|
|
Day: 29, // leap day
|
|
|
|
Expect: "2004-02-29",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, test := range tests {
|
|
|
|
now, err := time.Parse(time.DateOnly, test.Now)
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("Test #%d: parse error: %s", i, err)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
actual := utility.NextMonth(now, test.Day).Format("2006-01-02")
|
|
|
|
if actual != test.Expect {
|
|
|
|
t.Errorf("Test #%d: expected %s but got %s", i, test.Expect, actual)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-22 01:12:34 +00:00
|
|
|
func TestFormatDurationCoarse(t *testing.T) {
|
|
|
|
var tests = []struct {
|
|
|
|
In time.Duration
|
|
|
|
Expect string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
In: 0,
|
|
|
|
Expect: "0 seconds",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 1 * time.Second,
|
|
|
|
Expect: "1 second",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 2 * time.Second,
|
|
|
|
Expect: "2 seconds",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 25 * time.Second,
|
|
|
|
Expect: "25 seconds",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 59 * time.Second,
|
|
|
|
Expect: "59 seconds",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 60 * time.Second,
|
|
|
|
Expect: "1 minute",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 90 * time.Second,
|
|
|
|
Expect: "1 minute",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 119 * time.Second,
|
|
|
|
Expect: "1 minute",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 120 * time.Second,
|
|
|
|
Expect: "2 minutes",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 15 * time.Minute,
|
|
|
|
Expect: "15 minutes",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 59 * time.Minute,
|
|
|
|
Expect: "59 minutes",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 60 * time.Minute,
|
|
|
|
Expect: "1 hour",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 75 * time.Minute,
|
|
|
|
Expect: "1 hour",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 119 * time.Minute,
|
|
|
|
Expect: "1 hour",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 120 * time.Minute,
|
|
|
|
Expect: "2 hours",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 14 * time.Hour,
|
|
|
|
Expect: "14 hours",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 23 * time.Hour,
|
|
|
|
Expect: "23 hours",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 24 * time.Hour,
|
|
|
|
Expect: "1 day",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 36 * time.Hour,
|
|
|
|
Expect: "1 day",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: 48 * time.Hour,
|
|
|
|
Expect: "2 days",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 60,
|
|
|
|
Expect: "2 months",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 365,
|
|
|
|
Expect: "1 year",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 30 * 12,
|
|
|
|
Expect: "1 year",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour*24*30*12 + time.Hour*12,
|
|
|
|
Expect: "1 year",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 30 * 13,
|
|
|
|
Expect: "1.1 years",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 30 * 18,
|
|
|
|
Expect: "1.5 years",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 30 * 22,
|
|
|
|
Expect: "1.8 years",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 30 * 24,
|
|
|
|
Expect: "2 years",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 30 * 36,
|
|
|
|
Expect: "3 years",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
In: time.Hour * 24 * 30 * 49,
|
|
|
|
Expect: "4 years",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, test := range tests {
|
|
|
|
actual := utility.FormatDurationCoarse(test.In)
|
|
|
|
if actual != test.Expect {
|
|
|
|
t.Errorf("Expected %d to be '%s' but got '%s'", test.In, test.Expect, actual)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|