Fix DueDate parsing to support Checkvist API slash format

The Checkvist API returns due dates in slash format (2026/01/15),
but parseDueDate() only supported ISO format with dashes.

- Extend parseDueDate() to try both formats (slashes and dashes)
- Add test case for Checkvist API format parsing
- Fix TestTaskBuilder to use existing DueTomorrow constant

Closes checkvist-api-otm
This commit is contained in:
Oliver Jakoubek 2026-01-15 09:29:20 +01:00
commit 8c9f888927
4 changed files with 49 additions and 6 deletions

View file

@ -240,14 +240,21 @@ func (s *TaskService) Invalidate(ctx context.Context, taskID int) (*Task, error)
}
// parseDueDate attempts to parse the DueDateRaw string into a time.Time.
// It supports ISO 8601 date format (YYYY-MM-DD).
// It supports the Checkvist API format (YYYY/MM/DD) and ISO 8601 format (YYYY-MM-DD).
func parseDueDate(task *Task) {
if task.DueDateRaw == "" {
return
}
// Try to parse as ISO date
if t, err := time.Parse("2006-01-02", task.DueDateRaw); err == nil {
task.DueDate = &t
// Try multiple date formats (API uses slashes, ISO uses dashes)
formats := []string{
"2006/01/02", // Checkvist API format
"2006-01-02", // ISO 8601 format
}
for _, format := range formats {
if t, err := time.Parse(format, task.DueDateRaw); err == nil {
task.DueDate = &t
return
}
}
}