diff --git a/__tests__/lib/validations.test.ts b/__tests__/lib/validations.test.ts index b712821..5b3c117 100644 --- a/__tests__/lib/validations.test.ts +++ b/__tests__/lib/validations.test.ts @@ -10,7 +10,29 @@ const bikeSchema = z.object({ .min(1, 'Name darf nicht nur aus Leerzeichen bestehen'), brand: z.string().optional().transform((val) => val?.trim() || undefined), model: z.string().optional().transform((val) => val?.trim() || undefined), - purchaseDate: z.string().datetime().optional().or(z.date().optional()), + purchaseDate: z + .union([z.date(), z.string()]) + .optional() + .transform((val) => { + if (!val || val === undefined) return undefined + if (val instanceof Date) { + return isNaN(val.getTime()) ? undefined : val + } + if (typeof val === 'string') { + // Handle YYYY-MM-DD format (from HTML date input) + if (/^\d{4}-\d{2}-\d{2}$/.test(val)) { + const date = new Date(val + 'T00:00:00.000Z') + return isNaN(date.getTime()) ? undefined : date + } + // Handle ISO datetime format or any other parseable date string + const date = new Date(val) + return isNaN(date.getTime()) ? undefined : date + } + return undefined + }) + .refine((val) => val === undefined || val instanceof Date, { + message: 'Ungültiges Datumsformat', + }), notes: z.string().optional().transform((val) => val?.trim() || undefined), })