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  }