618 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			618 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Go
		
	
	
	
package controllers
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
func TestCalculateActiveAndUpcomingRecurringPeriods(t *testing.T) {
 | 
						|
	type recurrence struct {
 | 
						|
		Start string
 | 
						|
		End   string
 | 
						|
		Freq  string
 | 
						|
		Until string
 | 
						|
	}
 | 
						|
 | 
						|
	type testcase struct {
 | 
						|
		now string
 | 
						|
 | 
						|
		recurrence recurrence
 | 
						|
 | 
						|
		wantActive   string
 | 
						|
		wantUpcoming string
 | 
						|
	}
 | 
						|
 | 
						|
	check := func(t *testing.T, tc testcase) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		_, err := time.Parse(time.RFC3339, "2021-05-08T00:00:00Z")
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		now, err := time.Parse(time.RFC3339, tc.now)
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		active, upcoming, err := parseAndMatchRecurringPeriod(now, tc.recurrence.Start, tc.recurrence.End, tc.recurrence.Freq, tc.recurrence.Until)
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		if active.String() != tc.wantActive {
 | 
						|
			t.Errorf("unexpected active: want %q, got %q", tc.wantActive, active)
 | 
						|
		}
 | 
						|
 | 
						|
		if upcoming.String() != tc.wantUpcoming {
 | 
						|
			t.Errorf("unexpected upcoming: want %q, got %q", tc.wantUpcoming, upcoming)
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	t.Run("onetime override about to start", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-04-30T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "2021-05-01T00:00:00+09:00-2021-05-03T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("onetime override started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-01T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-01T00:00:00+09:00-2021-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("onetime override about to end", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-02T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-01T00:00:00+09:00-2021-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("onetime override ended", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-03T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override about to start", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-04-30T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "2021-05-01T00:00:00+09:00-2021-05-03T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-01T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-01T00:00:00+09:00-2021-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2021-05-08T00:00:00+09:00-2021-05-10T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override about to end", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-02T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-01T00:00:00+09:00-2021-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2021-05-08T00:00:00+09:00-2021-05-10T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override ended", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-03T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "2021-05-08T00:00:00+09:00-2021-05-10T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override reccurrence about to start", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-07T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "2021-05-08T00:00:00+09:00-2021-05-10T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override reccurrence started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-08T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-08T00:00:00+09:00-2021-05-10T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2021-05-15T00:00:00+09:00-2021-05-17T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override reccurrence about to end", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-09T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-08T00:00:00+09:00-2021-05-10T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2021-05-15T00:00:00+09:00-2021-05-17T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override reccurrence ended", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-10T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "2021-05-15T00:00:00+09:00-2021-05-17T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override's last reccurrence about to start", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-04-29T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "2022-04-30T00:00:00+09:00-2022-05-02T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override reccurrence started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-04-30T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2022-04-30T00:00:00+09:00-2022-05-02T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override reccurrence about to end", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-05-01T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "2022-04-30T00:00:00+09:00-2022-05-02T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override reccurrence ended", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-05-02T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("weekly override repeated forever started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Weekly",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-08T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-08T00:00:00+09:00-2021-05-10T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2021-05-15T00:00:00+09:00-2021-05-17T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("monthly override started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Monthly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-01T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-01T00:00:00+09:00-2021-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2021-06-01T00:00:00+09:00-2021-06-03T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("monthly override recurrence started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Monthly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-06-01T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-06-01T00:00:00+09:00-2021-06-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2021-07-01T00:00:00+09:00-2021-07-03T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("monthly override's last reccurence about to start", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Monthly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-04-30T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "2022-05-01T00:00:00+09:00-2022-05-03T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("monthly override's last reccurence started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Monthly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-05-01T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2022-05-01T00:00:00+09:00-2022-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("monthly override's last reccurence started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Monthly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-05-01T00:00:01+09:00",
 | 
						|
 | 
						|
			wantActive:   "2022-05-01T00:00:00+09:00-2022-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("monthly override's last reccurence ending", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Monthly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-05-02T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "2022-05-01T00:00:00+09:00-2022-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("monthly override's last reccurence ended", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Monthly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-05-03T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("yearly override started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Yearly",
 | 
						|
				Until: "2022-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2021-05-01T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2021-05-01T00:00:00+09:00-2021-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2022-05-01T00:00:00+09:00-2022-05-03T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("yearly override reccurrence started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Yearly",
 | 
						|
				Until: "2023-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2022-05-01T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2022-05-01T00:00:00+09:00-2022-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "2023-05-01T00:00:00+09:00-2023-05-03T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("yearly override's last recurrence about to start", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Yearly",
 | 
						|
				Until: "2023-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2023-04-30T23:59:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "2023-05-01T00:00:00+09:00-2023-05-03T00:00:00+09:00",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("yearly override's last recurrence started", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Yearly",
 | 
						|
				Until: "2023-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2023-05-01T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "2023-05-01T00:00:00+09:00-2023-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("yearly override's last recurrence ending", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Yearly",
 | 
						|
				Until: "2023-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2023-05-02T23:23:59+09:00",
 | 
						|
 | 
						|
			wantActive:   "2023-05-01T00:00:00+09:00-2023-05-03T00:00:00+09:00",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("yearly override's last recurrence ended", func(t *testing.T) {
 | 
						|
		t.Helper()
 | 
						|
 | 
						|
		check(t, testcase{
 | 
						|
			recurrence: recurrence{
 | 
						|
				Start: "2021-05-01T00:00:00+09:00",
 | 
						|
				End:   "2021-05-03T00:00:00+09:00",
 | 
						|
				Freq:  "Yearly",
 | 
						|
				Until: "2023-05-01T00:00:00+09:00",
 | 
						|
			},
 | 
						|
 | 
						|
			now: "2023-05-03T00:00:00+09:00",
 | 
						|
 | 
						|
			wantActive:   "",
 | 
						|
			wantUpcoming: "",
 | 
						|
		})
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func parseAndMatchRecurringPeriod(now time.Time, start, end, frequency, until string) (*Period, *Period, error) {
 | 
						|
	startTime, err := time.Parse(time.RFC3339, start)
 | 
						|
	if err != nil {
 | 
						|
		return nil, nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	endTime, err := time.Parse(time.RFC3339, end)
 | 
						|
	if err != nil {
 | 
						|
		return nil, nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var untilTime time.Time
 | 
						|
 | 
						|
	if until != "" {
 | 
						|
		ut, err := time.Parse(time.RFC3339, until)
 | 
						|
		if err != nil {
 | 
						|
			return nil, nil, err
 | 
						|
		}
 | 
						|
 | 
						|
		untilTime = ut
 | 
						|
	}
 | 
						|
 | 
						|
	return MatchSchedule(now, startTime, endTime, RecurrenceRule{Frequency: frequency, UntilTime: untilTime})
 | 
						|
}
 | 
						|
 | 
						|
func FuzzMatchSchedule(f *testing.F) {
 | 
						|
	start := time.Now()
 | 
						|
	end := time.Now()
 | 
						|
	now := time.Now()
 | 
						|
	f.Fuzz(func(t *testing.T, freq string) {
 | 
						|
		// Verify that it never panics
 | 
						|
		_, _, _ = MatchSchedule(now, start, end, RecurrenceRule{Frequency: freq})
 | 
						|
	})
 | 
						|
}
 |