github.com/developest/gtm-enhanced@v1.0.4-0.20220111132249-cc80a3372c3f/util/date_test.go (about) 1 // Copyright 2016 Michael Schenk. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE file. 4 5 package util 6 7 import ( 8 "testing" 9 "time" 10 11 "github.com/jinzhu/now" 12 ) 13 14 func TestDateRanges(t *testing.T) { 15 tm, err := time.Parse("2006-Jan-02", "2015-Jul-01") 16 if err != nil { 17 t.Fatal(err) 18 } 19 saveNow := Now 20 defer func() { Now = saveNow }() 21 Now = func() time.Time { return tm } 22 23 TodayStart := "Wed Jul 1 00:00:00 UTC 2015" 24 TodayEnd := "Wed Jul 1 23:59:59.999999999 UTC 2015" 25 YesterdayStart := "Tue Jun 30 00:00:00 UTC 2015" 26 YesterdayEnd := "Tue Jun 30 23:59:59.999999999 UTC 2015" 27 ThisWeekStart := "Sun Jun 28 00:00:00 UTC 2015" 28 ThisWeekEnd := "Sat Jul 4 23:59:59.999999999 UTC 2015" 29 LastWeekStart := "Sun Jun 21 00:00:00 UTC 2015" 30 LastWeekEnd := "Sat Jun 27 23:59:59.999999999 UTC 2015" 31 ThisMonthStart := "Wed Jul 1 00:00:00 UTC 2015" 32 ThisMonthEnd := "Fri Jul 31 23:59:59.999999999 UTC 2015" 33 LastMonthStart := "Mon Jun 1 00:00:00 UTC 2015" 34 LastMonthEnd := "Tue Jun 30 23:59:59.999999999 UTC 2015" 35 ThisYearStart := "Thu Jan 1 00:00:00 UTC 2015" 36 ThisYearEnd := "Thu Dec 31 23:59:59.999999999 UTC 2015" 37 LastYearStart := "Wed Jan 1 00:00:00 UTC 2014" 38 LastYearEnd := "Wed Dec 31 23:59:59.999999999 UTC 2014" 39 40 dr := TodayRange() 41 if !dr.Start.Equal(parseUnixDate(TodayStart, t)) || !dr.End.Equal(parseUnixDate(TodayEnd, t)) { 42 t.Errorf("Today -> want %s - %s, got %s - %s", TodayStart, TodayEnd, dr.Start, dr.End) 43 } 44 45 dr = YesterdayRange() 46 if !dr.Start.Equal(parseUnixDate(YesterdayStart, t)) || !dr.End.Equal(parseUnixDate(YesterdayEnd, t)) { 47 t.Errorf("Yesterday -> want %s - %s, got %s - %s", YesterdayStart, YesterdayEnd, dr.Start, dr.End) 48 } 49 50 dr = ThisWeekRange() 51 if !dr.Start.Equal(parseUnixDate(ThisWeekStart, t)) || !dr.End.Equal(parseUnixDate(ThisWeekEnd, t)) { 52 t.Errorf("ThisWeek -> want %s - %s, got %s - %s", ThisWeekStart, ThisWeekEnd, dr.Start, dr.End) 53 } 54 55 dr = LastWeekRange() 56 if !dr.Start.Equal(parseUnixDate(LastWeekStart, t)) || !dr.End.Equal(parseUnixDate(LastWeekEnd, t)) { 57 t.Errorf("LastWeek -> want %s - %s, got %s - %s", LastWeekStart, LastWeekEnd, dr.Start, dr.End) 58 } 59 60 dr = ThisMonthRange() 61 if !dr.Start.Equal(parseUnixDate(ThisMonthStart, t)) || !dr.End.Equal(parseUnixDate(ThisMonthEnd, t)) { 62 t.Errorf("ThisMonth -> want %s - %s, got %s - %s", ThisMonthStart, LastWeekEnd, dr.Start, dr.End) 63 } 64 65 dr = LastMonthRange() 66 if !dr.Start.Equal(parseUnixDate(LastMonthStart, t)) || !dr.End.Equal(parseUnixDate(LastMonthEnd, t)) { 67 t.Errorf("LastMonth -> want %s - %s, got %s - %s", LastMonthStart, LastWeekEnd, dr.Start, dr.End) 68 } 69 70 dr = ThisYearRange() 71 if !dr.Start.Equal(parseUnixDate(ThisYearStart, t)) || !dr.End.Equal(parseUnixDate(ThisYearEnd, t)) { 72 t.Errorf("ThisYear -> want %s - %s, got %s - %s", ThisYearStart, LastWeekEnd, dr.Start, dr.End) 73 } 74 75 dr = LastYearRange() 76 if !dr.Start.Equal(parseUnixDate(LastYearStart, t)) || !dr.End.Equal(parseUnixDate(LastYearEnd, t)) { 77 t.Errorf("LastYear -> want %s - %s, got %s - %s", LastYearStart, LastWeekEnd, dr.Start, dr.End) 78 } 79 80 } 81 82 func parseUnixDate(dt string, t *testing.T) time.Time { 83 tm, err := time.Parse(time.UnixDate, dt) 84 if err != nil { 85 t.Fatal(err) 86 } 87 return tm 88 } 89 90 func TestTodayRange(t *testing.T) { 91 validDates := []time.Time{ 92 now.BeginningOfDay(), 93 now.EndOfDay(), 94 now.BeginningOfDay().Add(time.Nanosecond), 95 now.EndOfDay().Add(-time.Nanosecond)} 96 97 dateRange := TodayRange() 98 99 for n, d := range validDates { 100 if !dateRange.Within(d) { 101 t.Errorf("%d: %s not within date range %+v", n, d, dateRange) 102 } 103 } 104 105 invalidDates := []time.Time{ 106 now.BeginningOfDay().Add(-time.Nanosecond), 107 now.EndOfDay().Add(time.Nanosecond), 108 YesterdayRange().Start, 109 YesterdayRange().End} 110 111 for n, d := range invalidDates { 112 if dateRange.Within(d) { 113 t.Errorf("%d: %s is within date range %+v", n, d, dateRange) 114 } 115 } 116 } 117 118 func TestAfterNow(t *testing.T) { 119 tm, err := time.Parse("2006-Jan-02", "2015-Jul-01") 120 if err != nil { 121 t.Fatal(err) 122 } 123 saveNow := Now 124 defer func() { Now = saveNow }() 125 Now = func() time.Time { return tm } 126 127 dt, err := time.Parse("2006-Jan-02", "2015-Jun-30") 128 if err != nil { 129 t.Fatal(err) 130 } 131 132 dr := AfterNow(0) 133 if !dr.Within(dt) { 134 t.Errorf("AfterNow(0) %s is not within date range %+v", dt, dr) 135 } 136 137 dr = AfterNow(1) 138 if !dr.Within(dt) { 139 t.Errorf("AfterNow(1) %s is not within date range %+v", dt, dr) 140 } 141 142 dr = AfterNow(2) 143 if dr.Within(dt) { 144 t.Errorf("AfterNow(2) %s is within date range %+v", dt, dr) 145 } 146 147 } 148 149 func TestStartOnlyRange(t *testing.T) { 150 tm, err := time.Parse("2006-Jan-02", "2015-Jul-01") 151 if err != nil { 152 t.Fatal(err) 153 } 154 dr := DateRange{Start: tm} 155 156 testDate, err := time.Parse("2006-Jan-02", "2015-Jul-01") 157 if err != nil { 158 t.Fatal(err) 159 } 160 161 if !dr.Within(testDate) { 162 t.Errorf("dr.Within(%s) not within %+v", testDate, dr) 163 } 164 165 testDate, err = time.Parse("2006-Jan-02", "2015-Jul-02") 166 if err != nil { 167 t.Fatal(err) 168 } 169 if !dr.Within(testDate) { 170 t.Errorf("dr.Within(%s) not within %+v", testDate, dr) 171 } 172 173 testDate, err = time.Parse("2006-Jan-02", "2015-Jun-02") 174 if err != nil { 175 t.Fatal(err) 176 } 177 if dr.Within(testDate) { 178 t.Errorf("dr.Within(%s) within %+v", testDate, dr) 179 } 180 } 181 182 func TestEndOnlyRange(t *testing.T) { 183 tm, err := time.Parse("2006-Jan-02", "2015-Jul-01") 184 if err != nil { 185 t.Fatal(err) 186 } 187 dr := DateRange{End: tm} 188 189 testDate, err := time.Parse("2006-Jan-02", "2015-Jul-01") 190 if err != nil { 191 t.Fatal(err) 192 } 193 194 if !dr.Within(testDate) { 195 t.Errorf("dr.Within(%s) not within %+v", testDate, dr) 196 } 197 198 testDate, err = time.Parse("2006-Jan-02", "2015-Jun-30") 199 if err != nil { 200 t.Fatal(err) 201 } 202 if !dr.Within(testDate) { 203 t.Errorf("dr.Within(%s) not within %+v", testDate, dr) 204 } 205 206 testDate, err = time.Parse("2006-Jan-02", "2015-Jul-02") 207 if err != nil { 208 t.Fatal(err) 209 } 210 if dr.Within(testDate) { 211 t.Errorf("dr.Within(%s) within %+v", testDate, dr) 212 } 213 }