fix end sprint calculation

This commit is contained in:
Erik Winter 2021-02-09 07:12:21 +01:00
parent 8d708f66ad
commit ee1aad104b
2 changed files with 180 additions and 112 deletions

View File

@ -131,14 +131,13 @@ func NewDateFromString(date string) Date {
case "this sprint":
fallthrough
case "deze sprint":
aSprintStart := NewDate(2021, 1, 29)
daysToAdd := findDaysToWeekday(Today.Weekday(), time.Thursday)
diff := aSprintStart.DaysBetween(Today.AddDays(daysToAdd))
if diff%14 != 0 {
daysToAdd += 7
tDate := NewDate(2021, 1, 28) // a sprint end
for {
if tDate.After(Today) {
return tDate
}
tDate = tDate.AddDays(14)
}
return Today.AddDays(daysToAdd)
}
t, err := time.Parse("2006-01-02", fmt.Sprintf("%.10s", date))

View File

@ -75,111 +75,180 @@ func TestWeekdaysUnique(t *testing.T) {
}
func TestNewDateFromString(t *testing.T) {
task.Today = task.NewDate(2021, 1, 30)
for _, tc := range []struct {
name string
input string
exp task.Date
}{
{
name: "empty",
exp: task.Date{},
},
{
name: "no date",
input: "no date",
exp: task.Date{},
},
{
name: "normal",
input: "2021-01-30 (saturday)",
exp: task.NewDate(2021, 1, 30),
},
{
name: "short",
input: "2021-01-30",
exp: task.NewDate(2021, 1, 30),
},
{
name: "english dayname lowercase",
input: "monday",
exp: task.NewDate(2021, 2, 1),
},
{
name: "english dayname capitalized",
input: "Monday",
exp: task.NewDate(2021, 2, 1),
},
{
name: "dutch dayname lowercase",
input: "maandag",
exp: task.NewDate(2021, 2, 1),
},
{
name: "today english",
input: "today",
exp: task.NewDate(2021, 1, 30),
},
{
name: "today dutch",
input: "vandaag",
exp: task.NewDate(2021, 1, 30),
},
{
name: "tomorrow english",
input: "tomorrow",
exp: task.NewDate(2021, 1, 31),
},
{
name: "tomorrow dutch",
input: "morgen",
exp: task.NewDate(2021, 1, 31),
},
{
name: "day after tomorrow english",
input: "day after tomorrow",
exp: task.NewDate(2021, 2, 1),
},
{
name: "day after tomorrow dutch",
input: "overmorgen",
exp: task.NewDate(2021, 2, 1),
},
{
name: "this week english",
input: "this week",
exp: task.NewDate(2021, 2, 5),
},
{
name: "this week dutch",
input: "deze week",
exp: task.NewDate(2021, 2, 5),
},
{
name: "next week english",
input: "next week",
exp: task.NewDate(2021, 2, 12),
},
{
name: "next week dutch",
input: "volgende week",
exp: task.NewDate(2021, 2, 12),
},
{
name: "this sprint english",
input: "this sprint",
exp: task.NewDate(2021, 2, 11),
},
{
name: "this sprint dutch",
input: "deze sprint",
exp: task.NewDate(2021, 2, 11),
},
} {
t.Run(tc.name, func(t *testing.T) {
test.Equals(t, tc.exp, task.NewDateFromString(tc.input))
})
}
t.Run("no date", func(t *testing.T) {
task.Today = task.NewDate(2021, 1, 30)
for _, tc := range []struct {
name string
input string
exp task.Date
}{
{
name: "empty",
exp: task.Date{},
},
{
name: "no date",
input: "no date",
exp: task.Date{},
},
} {
t.Run(tc.name, func(t *testing.T) {
test.Equals(t, tc.exp, task.NewDateFromString(tc.input))
})
}
})
t.Run("digits", func(t *testing.T) {
task.Today = task.NewDate(2021, 1, 30)
for _, tc := range []struct {
name string
input string
exp task.Date
}{
{
name: "normal",
input: "2021-01-30 (saturday)",
exp: task.NewDate(2021, 1, 30),
},
{
name: "short",
input: "2021-01-30",
exp: task.NewDate(2021, 1, 30),
},
} {
t.Run(tc.name, func(t *testing.T) {
test.Equals(t, tc.exp, task.NewDateFromString(tc.input))
})
}
})
t.Run("day name", func(t *testing.T) {
task.Today = task.NewDate(2021, 1, 30)
for _, tc := range []struct {
name string
input string
exp task.Date
}{
{
name: "english dayname lowercase",
input: "monday",
exp: task.NewDate(2021, 2, 1),
},
{
name: "english dayname capitalized",
input: "Monday",
exp: task.NewDate(2021, 2, 1),
},
{
name: "dutch dayname lowercase",
input: "maandag",
exp: task.NewDate(2021, 2, 1),
},
} {
t.Run(tc.name, func(t *testing.T) {
test.Equals(t, tc.exp, task.NewDateFromString(tc.input))
})
}
})
t.Run("relative days", func(t *testing.T) {
task.Today = task.NewDate(2021, 1, 30)
for _, tc := range []struct {
name string
input string
exp task.Date
}{
{
name: "today english",
input: "today",
exp: task.NewDate(2021, 1, 30),
},
{
name: "today dutch",
input: "vandaag",
exp: task.NewDate(2021, 1, 30),
},
{
name: "tomorrow english",
input: "tomorrow",
exp: task.NewDate(2021, 1, 31),
},
{
name: "tomorrow dutch",
input: "morgen",
exp: task.NewDate(2021, 1, 31),
},
{
name: "day after tomorrow english",
input: "day after tomorrow",
exp: task.NewDate(2021, 2, 1),
},
{
name: "day after tomorrow dutch",
input: "overmorgen",
exp: task.NewDate(2021, 2, 1),
},
{
name: "this week english",
input: "this week",
exp: task.NewDate(2021, 2, 5),
},
{
name: "this week dutch",
input: "deze week",
exp: task.NewDate(2021, 2, 5),
},
{
name: "next week english",
input: "next week",
exp: task.NewDate(2021, 2, 12),
},
{
name: "next week dutch",
input: "volgende week",
exp: task.NewDate(2021, 2, 12),
},
} {
t.Run(tc.name, func(t *testing.T) {
test.Equals(t, tc.exp, task.NewDateFromString(tc.input))
})
}
})
t.Run("sprint", func(t *testing.T) {
for _, tc := range []struct {
name string
today task.Date
input string
exp task.Date
}{
{
name: "this sprint english",
today: task.NewDate(2021, 1, 30),
input: "this sprint",
exp: task.NewDate(2021, 2, 11),
},
{
name: "this sprint dutch",
today: task.NewDate(2021, 1, 30),
input: "deze sprint",
exp: task.NewDate(2021, 2, 11),
},
{
name: "jump week",
today: task.NewDate(2021, 2, 5),
input: "this sprint",
exp: task.NewDate(2021, 2, 11),
},
} {
t.Run(tc.name, func(t *testing.T) {
task.Today = tc.today
test.Equals(t, tc.exp, task.NewDateFromString(tc.input))
})
}
})
}
func TestDateString(t *testing.T) {