diff --git a/services/migrations/pagure.go b/services/migrations/pagure.go index 44a35fc915..6573871e0d 100644 --- a/services/migrations/pagure.go +++ b/services/migrations/pagure.go @@ -178,13 +178,20 @@ func processDate(dateStr *string) time.Time { return date } + // Try parsing as Unix timestamp first unix, err := strconv.Atoi(*dateStr) - if err != nil { - log.Error("Error:", err) + if err == nil { + date = time.Unix(int64(unix), 0) return date } - date = time.Unix(int64(unix), 0) + // Try parsing as YYYY-MM-DD format + parsedDate, err := time.Parse("2006-01-02", *dateStr) + if err == nil { + return parsedDate + } + + log.Error("Error parsing date '%s': %v", *dateStr, err) return date } diff --git a/services/migrations/pagure_test.go b/services/migrations/pagure_test.go index 22b2eed85e..bac3eb24ad 100644 --- a/services/migrations/pagure_test.go +++ b/services/migrations/pagure_test.go @@ -635,3 +635,43 @@ func TestPagureDownloadRepoWithPrivateIssues(t *testing.T) { }, }, comments) } + +func TestProcessDate(t *testing.T) { + tests := []struct { + name string + input *string + expected time.Time + }{ + { + name: "nil input", + input: nil, + expected: time.Time{}, + }, + { + name: "empty string", + input: strPtr(""), + expected: time.Time{}, + }, + { + name: "unix timestamp", + input: strPtr("1609459200"), + expected: time.Unix(1609459200, 0), + }, + { + name: "YYYY-MM-DD format", + input: strPtr("2025-12-12"), + expected: time.Date(2025, time.December, 12, 0, 0, 0, 0, time.UTC), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := processDate(tt.input) + assert.Equal(t, tt.expected, result) + }) + } +} + +func strPtr(s string) *string { + return &s +}