87 lines
2.9 KiB
Go
87 lines
2.9 KiB
Go
package chrono
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// This tests the TimeElapsedToString function and the TimeSinceToString function that implements it
|
|
func TestTimeElapsedToString(t *testing.T) {
|
|
tests := []struct {
|
|
startInput time.Time
|
|
endInput time.Time
|
|
expected string
|
|
}{
|
|
{time.Time{},
|
|
time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
"Never"},
|
|
{time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
time.Time{},
|
|
"Never"},
|
|
{time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.June, 27, 11, 0, 0, 999999999, time.UTC),
|
|
"Just now"},
|
|
{time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.June, 27, 11, 0, 0, 1, time.UTC),
|
|
"Just now"},
|
|
{time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.June, 27, 11, 1, 0, 1, time.UTC),
|
|
"1 minute"},
|
|
{time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.June, 27, 11, 3, 0, 1, time.UTC),
|
|
"3 minutes"},
|
|
{time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.June, 27, 12, 0, 0, 1, time.UTC),
|
|
"1 hour"},
|
|
{time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.June, 27, 13, 0, 0, 1, time.UTC),
|
|
"2 hours"},
|
|
{time.Date(2025, time.June, 27, 11, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.June, 30, 11, 0, 0, 1, time.UTC),
|
|
"3 days"},
|
|
{time.Date(2025, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.January, 8, 1, 0, 0, 1, time.UTC),
|
|
"1 week"},
|
|
{time.Date(2025, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.January, 15, 1, 0, 0, 1, time.UTC),
|
|
"2 weeks"},
|
|
{time.Date(2025, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.February, 7, 0, 0, 0, 1, time.UTC),
|
|
"1 month"},
|
|
{time.Date(2025, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.March, 15, 0, 0, 0, 1, time.UTC),
|
|
"2 months"},
|
|
{time.Date(2025, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
time.Date(2026, time.January, 1, 0, 0, 0, 1, time.UTC),
|
|
"1 year"},
|
|
{time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
time.Date(2025, time.January, 1, 0, 0, 0, 1, time.UTC),
|
|
"5 years"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
result := TimeElapsedToString(tt.startInput, tt.endInput, "UTC")
|
|
if result != tt.expected {
|
|
t.Errorf("TimeElapsedToString(%q, %q, \"UTC\") = %q; want %q", tt.startInput, tt.endInput, result, tt.expected)
|
|
}
|
|
}
|
|
|
|
sinceTests := []struct {
|
|
timeInput time.Time
|
|
expected string
|
|
}{
|
|
{time.Now().Add(-1 * time.Minute), "1 minute ago"},
|
|
{time.Now().Add(-2 * time.Hour), "2 hours ago"},
|
|
{time.Now().Add(-3 * time.Hour * 24), "3 days ago"},
|
|
{time.Now(), "Just now"},
|
|
{time.Now().Add(-5 * 7 * 24 * time.Hour), "1 month ago"},
|
|
}
|
|
|
|
for _, tt := range sinceTests {
|
|
result := TimeSinceToString(tt.timeInput, "UTC")
|
|
if result != tt.expected {
|
|
t.Errorf("TimeSinceToString(%q, \"UTC\") = %q; want %q", tt.timeInput, result, tt.expected)
|
|
}
|
|
}
|
|
}
|