136 lines
3.8 KiB
Go
136 lines
3.8 KiB
Go
package cif
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestIsSameDay(t *testing.T) {
|
|
today := time.Now()
|
|
notToday := time.Date(2024, 01, 23, 23, 01, 3, 421, time.Local)
|
|
|
|
if !isSameToday(today) {
|
|
t.Errorf("Error in isSameDay(today). Expected true, got false.")
|
|
}
|
|
|
|
if isSameToday(notToday) {
|
|
t.Errorf("Error in isSameDay(notToday). Expected false, got true.")
|
|
}
|
|
}
|
|
|
|
func TestHowManyDaysAgo(t *testing.T) {
|
|
testCases := []struct {
|
|
input time.Time
|
|
expected int
|
|
}{
|
|
{time.Now().In(time.UTC), 0}, // Today
|
|
{time.Now().In(time.UTC).Add(-24 * time.Hour), 1}, // Yesterday
|
|
{time.Now().In(time.UTC).Add(-48 * time.Hour), 2}, // Ereyesterday
|
|
{time.Now().In(time.UTC).Add(24 * time.Hour), -1}, // Tomorrow
|
|
{time.Now().In(time.UTC).Add(48 * time.Hour), -2}, // Overmorrow
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
result := howManyDaysAgo(tc.input)
|
|
if result != tc.expected {
|
|
t.Errorf("For input %v, expected %d but got %d", tc.input, tc.expected, result)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGetDayString(t *testing.T) {
|
|
testCases := []struct {
|
|
input time.Time
|
|
expected string
|
|
}{ // Note that the test times are in UTC, but days are checked in Europe/London
|
|
{time.Date(2024, time.April, 7, 0, 0, 0, 0, time.UTC), "sun"},
|
|
{time.Date(2024, time.April, 4, 21, 0, 0, 0, time.UTC), "thu"},
|
|
{time.Date(2001, time.September, 11, 12, 46, 0, 0, time.UTC), "tue"},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
result := getDayString(tc.input)
|
|
if result != tc.expected {
|
|
t.Errorf("For input %v, expected %s, but got %s", tc.input, tc.expected, result)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateUpdateDays(t *testing.T) {
|
|
testCases := []struct {
|
|
days int
|
|
expected []time.Time
|
|
}{
|
|
{1, []time.Time{time.Now()}},
|
|
{2, []time.Time{time.Now().Add(-24 * time.Hour), time.Now()}},
|
|
{4, []time.Time{time.Now().Add(-72 * time.Hour),
|
|
time.Now().Add(-48 * time.Hour),
|
|
time.Now().Add(-24 * time.Hour),
|
|
time.Now(),
|
|
}},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
result := generateUpdateDays(tc.days)
|
|
|
|
if len(result) != len(tc.expected) {
|
|
t.Errorf("For %d days, expected %v, but got %v", tc.days, tc.expected, result)
|
|
continue
|
|
}
|
|
|
|
for i := range result {
|
|
if !isSameDate(result[i], tc.expected[i]) {
|
|
t.Errorf("For %d days, expected %v, but got %v", tc.days, tc.expected, result)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseCifDate(t *testing.T) {
|
|
testCases := []struct {
|
|
dateString string
|
|
startOrEnd string
|
|
expect time.Time
|
|
}{
|
|
{"2024-04-05", "start", time.Date(2024, time.April, 5, 0, 0, 0, 0, londonTimezone)},
|
|
{"2022-01-01", "start", time.Date(2022, time.January, 1, 0, 0, 0, 0, londonTimezone)},
|
|
{"2015-09-26", "end", time.Date(2015, time.September, 26, 23, 59, 59, 0, londonTimezone)},
|
|
{"2018-03-13", "end", time.Date(2018, time.March, 13, 23, 59, 59, 0, londonTimezone)},
|
|
}
|
|
|
|
layout := "2006-01-02 15:04:05" // Layout for printing times in error cases.
|
|
|
|
for _, tc := range testCases {
|
|
result := ParseCifDate(&tc.dateString, tc.startOrEnd)
|
|
if result != tc.expect {
|
|
t.Errorf("For datestring %s, startOrEnd %s, expected %s, but got %s", tc.dateString, tc.startOrEnd, tc.expect.Format(layout), result.Format(layout))
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseDaysRun(t *testing.T) {
|
|
testCases := []struct {
|
|
input string
|
|
expect []string
|
|
}{
|
|
{"1111111", []string{"m", "t", "w", "th", "f", "s", "su"}},
|
|
{"0000001", []string{"su"}},
|
|
{"1000000", []string{"m"}},
|
|
{"0000100", []string{"f"}},
|
|
{"0111000", []string{"t", "w", "th"}},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
result := parseDaysRun(&tc.input)
|
|
if !reflect.DeepEqual(result, tc.expect) {
|
|
t.Errorf("For input %s, expected %v, but got %v", tc.input, tc.expect, result)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Checks if two time values have the same year, month and day.
|
|
func isSameDate(t1, t2 time.Time) bool {
|
|
return t1.Year() == t2.Year() && t1.Month() == t2.Month() && t1.Day() == t2.Day()
|
|
}
|