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

View File

@ -75,6 +75,8 @@ func TestWeekdaysUnique(t *testing.T) {
} }
func TestNewDateFromString(t *testing.T) { func TestNewDateFromString(t *testing.T) {
t.Run("no date", func(t *testing.T) {
task.Today = task.NewDate(2021, 1, 30) task.Today = task.NewDate(2021, 1, 30)
for _, tc := range []struct { for _, tc := range []struct {
name string name string
@ -90,6 +92,20 @@ func TestNewDateFromString(t *testing.T) {
input: "no date", input: "no date",
exp: task.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", name: "normal",
input: "2021-01-30 (saturday)", input: "2021-01-30 (saturday)",
@ -100,6 +116,21 @@ func TestNewDateFromString(t *testing.T) {
input: "2021-01-30", input: "2021-01-30",
exp: task.NewDate(2021, 1, 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", name: "english dayname lowercase",
input: "monday", input: "monday",
@ -115,6 +146,20 @@ func TestNewDateFromString(t *testing.T) {
input: "maandag", input: "maandag",
exp: task.NewDate(2021, 2, 1), 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", name: "today english",
input: "today", input: "today",
@ -165,21 +210,45 @@ func TestNewDateFromString(t *testing.T) {
input: "volgende week", input: "volgende week",
exp: task.NewDate(2021, 2, 12), 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) { t.Run(tc.name, func(t *testing.T) {
test.Equals(t, tc.exp, task.NewDateFromString(tc.input)) 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) { func TestDateString(t *testing.T) {