2021-01-31 10:01:03 +01:00
|
|
|
package task_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"git.sr.ht/~ewintr/go-kit/test"
|
|
|
|
"git.sr.ht/~ewintr/gte/internal/task"
|
|
|
|
)
|
|
|
|
|
2021-01-31 12:11:02 +01:00
|
|
|
func TestDaily(t *testing.T) {
|
|
|
|
daily := task.Daily{
|
|
|
|
Start: task.NewDate(2021, 1, 31), // a sunday
|
2021-01-31 10:01:03 +01:00
|
|
|
}
|
2021-01-31 12:11:02 +01:00
|
|
|
dailyStr := "2021-01-31 (sunday), daily"
|
|
|
|
|
|
|
|
t.Run("parse", func(t *testing.T) {
|
|
|
|
test.Equals(t, daily, task.NewRecurrer(dailyStr))
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("string", func(t *testing.T) {
|
|
|
|
test.Equals(t, dailyStr, daily.String())
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("recurs_on", func(t *testing.T) {
|
|
|
|
for _, tc := range []struct {
|
|
|
|
name string
|
|
|
|
date task.Date
|
|
|
|
exp bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "before",
|
|
|
|
date: task.NewDate(2021, 1, 30),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "on",
|
|
|
|
date: daily.Start,
|
|
|
|
exp: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "after",
|
|
|
|
date: task.NewDate(2021, 2, 1),
|
|
|
|
exp: true,
|
|
|
|
},
|
|
|
|
} {
|
|
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
|
|
test.Equals(t, tc.exp, daily.RecursOn(tc.date))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-02-02 08:47:58 +01:00
|
|
|
func TestParseWeekly(t *testing.T) {
|
|
|
|
start := task.NewDate(2021, 2, 7)
|
|
|
|
for _, tc := range []struct {
|
|
|
|
name string
|
|
|
|
input []string
|
|
|
|
expOk bool
|
|
|
|
expWeekly task.Weekly
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "empty",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "wrong type",
|
|
|
|
input: []string{"daily"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "wrong count",
|
|
|
|
input: []string{"weeekly"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "unknown day",
|
|
|
|
input: []string{"weekly", "festivus"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "one day",
|
|
|
|
input: []string{"weekly", "monday"},
|
|
|
|
expOk: true,
|
|
|
|
expWeekly: task.Weekly{
|
|
|
|
Start: start,
|
|
|
|
Weekdays: task.Weekdays{
|
|
|
|
time.Monday,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "multiple days",
|
|
|
|
input: []string{"weekly", "monday & thursday & saturday"},
|
|
|
|
expOk: true,
|
|
|
|
expWeekly: task.Weekly{
|
|
|
|
Start: start,
|
|
|
|
Weekdays: task.Weekdays{
|
|
|
|
time.Monday,
|
|
|
|
time.Thursday,
|
|
|
|
time.Saturday,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "wrong order",
|
|
|
|
input: []string{"weekly", "sunday & thursday & wednesday"},
|
|
|
|
expOk: true,
|
|
|
|
expWeekly: task.Weekly{
|
|
|
|
Start: start,
|
|
|
|
Weekdays: task.Weekdays{
|
|
|
|
time.Wednesday,
|
|
|
|
time.Thursday,
|
|
|
|
time.Sunday,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "doubles",
|
|
|
|
input: []string{"weekly", "sunday & sunday & monday"},
|
|
|
|
expOk: true,
|
|
|
|
expWeekly: task.Weekly{
|
|
|
|
Start: start,
|
|
|
|
Weekdays: task.Weekdays{
|
|
|
|
time.Monday,
|
|
|
|
time.Sunday,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "one unknown",
|
|
|
|
input: []string{"weekly", "sunday & someday"},
|
|
|
|
expOk: true,
|
|
|
|
expWeekly: task.Weekly{
|
|
|
|
Start: start,
|
|
|
|
Weekdays: task.Weekdays{
|
|
|
|
time.Sunday,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
} {
|
|
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
|
|
weekly, ok := task.ParseWeekly(start, tc.input)
|
|
|
|
test.Equals(t, tc.expOk, ok)
|
|
|
|
if tc.expOk {
|
|
|
|
test.Equals(t, tc.expWeekly, weekly)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-31 12:11:02 +01:00
|
|
|
func TestWeekly(t *testing.T) {
|
|
|
|
weekly := task.Weekly{
|
2021-02-02 08:47:58 +01:00
|
|
|
Start: task.NewDate(2021, 1, 31), // a sunday
|
|
|
|
Weekdays: task.Weekdays{
|
|
|
|
time.Monday,
|
|
|
|
time.Wednesday,
|
|
|
|
time.Thursday,
|
|
|
|
},
|
2021-01-31 12:11:02 +01:00
|
|
|
}
|
2021-02-02 08:47:58 +01:00
|
|
|
weeklyStr := "2021-01-31 (sunday), weekly, monday & wednesday & thursday"
|
2021-01-31 12:11:02 +01:00
|
|
|
|
|
|
|
t.Run("parse", func(t *testing.T) {
|
|
|
|
test.Equals(t, weekly, task.NewRecurrer(weeklyStr))
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("string", func(t *testing.T) {
|
|
|
|
test.Equals(t, weeklyStr, weekly.String())
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("recurs_on", func(t *testing.T) {
|
|
|
|
for _, tc := range []struct {
|
|
|
|
name string
|
|
|
|
date task.Date
|
|
|
|
exp bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "before start",
|
|
|
|
date: task.NewDate(2021, 1, 27), // a wednesday
|
|
|
|
},
|
|
|
|
{
|
2021-02-02 08:47:58 +01:00
|
|
|
name: "right weekday",
|
2021-01-31 12:11:02 +01:00
|
|
|
date: task.NewDate(2021, 2, 1), // a monday
|
2021-02-02 08:47:58 +01:00
|
|
|
exp: true,
|
2021-01-31 12:11:02 +01:00
|
|
|
},
|
|
|
|
{
|
2021-02-02 08:47:58 +01:00
|
|
|
name: "another right day",
|
2021-01-31 12:11:02 +01:00
|
|
|
date: task.NewDate(2021, 2, 3), // a wednesday
|
|
|
|
exp: true,
|
|
|
|
},
|
2021-02-02 08:47:58 +01:00
|
|
|
{
|
|
|
|
name: "wrong weekday",
|
|
|
|
date: task.NewDate(2021, 2, 5), // a friday
|
|
|
|
},
|
2021-01-31 12:11:02 +01:00
|
|
|
} {
|
|
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
|
|
test.Equals(t, tc.exp, weekly.RecursOn(tc.date))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBiweekly(t *testing.T) {
|
|
|
|
biweekly := task.Biweekly{
|
|
|
|
Start: task.NewDate(2021, 1, 31), // a sunday
|
|
|
|
Weekday: time.Wednesday,
|
|
|
|
}
|
|
|
|
biweeklyStr := "2021-01-31 (sunday), biweekly, wednesday"
|
|
|
|
|
|
|
|
t.Run("parse", func(t *testing.T) {
|
|
|
|
test.Equals(t, biweekly, task.NewRecurrer(biweeklyStr))
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("string", func(t *testing.T) {
|
|
|
|
test.Equals(t, biweeklyStr, biweekly.String())
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("recurs_on", func(t *testing.T) {
|
|
|
|
for _, tc := range []struct {
|
|
|
|
name string
|
|
|
|
date task.Date
|
|
|
|
exp bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "before start",
|
|
|
|
date: task.NewDate(2021, 1, 27), // a wednesday
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "wrong weekday",
|
|
|
|
date: task.NewDate(2021, 2, 1), // a monday
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "odd week count",
|
|
|
|
date: task.NewDate(2021, 2, 10), // a wednesday
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "right",
|
|
|
|
date: task.NewDate(2021, 2, 17), // a wednesday
|
|
|
|
exp: true,
|
|
|
|
},
|
|
|
|
} {
|
|
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
|
|
test.Equals(t, tc.exp, biweekly.RecursOn(tc.date))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
2021-01-31 10:01:03 +01:00
|
|
|
}
|