|
|
|
@ -13,27 +13,57 @@ func TestParseInterval(t *testing.T) { |
|
|
|
|
now := time.Now() |
|
|
|
|
|
|
|
|
|
tcs := []struct { |
|
|
|
|
interval string |
|
|
|
|
inp string |
|
|
|
|
duration time.Duration |
|
|
|
|
err *regexp.Regexp |
|
|
|
|
}{ |
|
|
|
|
{interval: "1d", duration: now.Sub(now.AddDate(0, 0, -1))}, |
|
|
|
|
{interval: "1w", duration: now.Sub(now.AddDate(0, 0, -7))}, |
|
|
|
|
{interval: "2w", duration: now.Sub(now.AddDate(0, 0, -14))}, |
|
|
|
|
{interval: "1M", duration: now.Sub(now.AddDate(0, -1, 0))}, |
|
|
|
|
{interval: "1y", duration: now.Sub(now.AddDate(-1, 0, 0))}, |
|
|
|
|
{interval: "5y", duration: now.Sub(now.AddDate(-5, 0, 0))}, |
|
|
|
|
{interval: "invalid-duration", err: regexp.MustCompile(`^time: invalid duration "?invalid-duration"?$`)}, |
|
|
|
|
{inp: "1d", duration: now.Sub(now.AddDate(0, 0, -1))}, |
|
|
|
|
{inp: "1w", duration: now.Sub(now.AddDate(0, 0, -7))}, |
|
|
|
|
{inp: "2w", duration: now.Sub(now.AddDate(0, 0, -14))}, |
|
|
|
|
{inp: "1M", duration: now.Sub(now.AddDate(0, -1, 0))}, |
|
|
|
|
{inp: "1y", duration: now.Sub(now.AddDate(-1, 0, 0))}, |
|
|
|
|
{inp: "5y", duration: now.Sub(now.AddDate(-5, 0, 0))}, |
|
|
|
|
{inp: "invalid-duration", err: regexp.MustCompile(`^time: invalid duration "?invalid-duration"?$`)}, |
|
|
|
|
} |
|
|
|
|
for i, tc := range tcs { |
|
|
|
|
t.Run(fmt.Sprintf("testcase %d", i), func(t *testing.T) { |
|
|
|
|
res, err := ParseInterval(tc.inp) |
|
|
|
|
if tc.err == nil { |
|
|
|
|
require.NoError(t, err, "input %q", tc.inp) |
|
|
|
|
require.Equal(t, tc.duration, res, "input %q", tc.inp) |
|
|
|
|
} else { |
|
|
|
|
require.Error(t, err, "input %q", tc.inp) |
|
|
|
|
require.Regexp(t, tc.err, err.Error()) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestParseDuration(t *testing.T) { |
|
|
|
|
tcs := []struct { |
|
|
|
|
inp string |
|
|
|
|
duration time.Duration |
|
|
|
|
err *regexp.Regexp |
|
|
|
|
}{ |
|
|
|
|
{inp: "1s", duration: time.Second}, |
|
|
|
|
{inp: "1m", duration: time.Minute}, |
|
|
|
|
{inp: "1h", duration: time.Hour}, |
|
|
|
|
{inp: "1d", duration: 24 * time.Hour}, |
|
|
|
|
{inp: "1w", duration: 7 * 24 * time.Hour}, |
|
|
|
|
{inp: "2w", duration: 2 * 7 * 24 * time.Hour}, |
|
|
|
|
{inp: "1M", duration: time.Duration(730.5 * float64(time.Hour))}, |
|
|
|
|
{inp: "1y", duration: 365.25 * 24 * time.Hour}, |
|
|
|
|
{inp: "5y", duration: 5 * 365.25 * 24 * time.Hour}, |
|
|
|
|
{inp: "invalid-duration", err: regexp.MustCompile(`^time: invalid duration "?invalid-duration"?$`)}, |
|
|
|
|
} |
|
|
|
|
for i, tc := range tcs { |
|
|
|
|
t.Run(fmt.Sprintf("testcase %d", i), func(t *testing.T) { |
|
|
|
|
res, err := ParseInterval(tc.interval) |
|
|
|
|
res, err := ParseDuration(tc.inp) |
|
|
|
|
if tc.err == nil { |
|
|
|
|
require.NoError(t, err, "interval %q", tc.interval) |
|
|
|
|
require.Equal(t, tc.duration, res, "interval %q", tc.interval) |
|
|
|
|
require.NoError(t, err, "input %q", tc.inp) |
|
|
|
|
require.Equal(t, tc.duration, res, "input %q", tc.inp) |
|
|
|
|
} else { |
|
|
|
|
require.Error(t, err, "interval %q", tc.interval) |
|
|
|
|
require.Error(t, err, "input %q", tc.inp) |
|
|
|
|
require.Regexp(t, tc.err, err.Error()) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|