Fix: Kaufdatum-Validierung für Fahrrad-Erstellung

- Kaufdatum akzeptiert jetzt YYYY-MM-DD Format (HTML date input)
- Unterstützung für ISO datetime Format und Date-Objekte
- Transform konvertiert Datumsstrings automatisch zu Date-Objekten
- API-Routes verwenden validierte Daten direkt ohne weitere Konvertierung
- Erweiterte Testfälle für verschiedene Datumsformate hinzugefügt
- Test-Schema aktualisiert, um echte Validierung zu reflektieren
This commit is contained in:
Denis Urs Rudolph
2025-12-05 22:25:07 +01:00
parent b525c07ccc
commit 0d06151603
5 changed files with 148 additions and 7 deletions

View File

@@ -173,6 +173,85 @@ describe('Validation Schemas', () => {
expect(result.data.notes).toBeUndefined()
}
})
it('should accept purchaseDate in YYYY-MM-DD format', () => {
// The schema accepts any string and transforms it to Date
const validData = {
name: 'Test Bike',
purchaseDate: '2024-01-15',
}
const result = bikeSchema.safeParse(validData)
if (!result.success) {
// Debug: show what went wrong
console.log('Validation failed:', JSON.stringify(result.error.errors, null, 2))
}
expect(result.success).toBe(true)
if (result.success) {
// Transform converts string to Date
expect(result.data.purchaseDate).toBeDefined()
if (result.data.purchaseDate) {
expect(result.data.purchaseDate).toBeInstanceOf(Date)
expect(result.data.purchaseDate.toISOString().split('T')[0]).toBe('2024-01-15')
}
}
})
it('should accept purchaseDate in ISO datetime format', () => {
const validData = {
name: 'Test Bike',
purchaseDate: '2024-01-15T10:30:00.000Z',
}
const result = bikeSchema.safeParse(validData)
expect(result.success).toBe(true)
if (result.success) {
// The transform converts it to Date, but Zod might return the string
// Let's check if it's a Date or a valid date string
expect(result.data.purchaseDate).toBeDefined()
if (result.data.purchaseDate instanceof Date) {
expect(result.data.purchaseDate).toBeInstanceOf(Date)
} else {
// If it's still a string, it should be parseable
expect(new Date(result.data.purchaseDate as string)).toBeInstanceOf(Date)
}
}
})
it('should accept purchaseDate as Date object', () => {
const validData = {
name: 'Test Bike',
purchaseDate: new Date('2024-01-15'),
}
const result = bikeSchema.safeParse(validData)
expect(result.success).toBe(true)
if (result.success) {
expect(result.data.purchaseDate).toBeInstanceOf(Date)
}
})
it('should accept bike without purchaseDate', () => {
const validData = {
name: 'Test Bike',
}
const result = bikeSchema.safeParse(validData)
expect(result.success).toBe(true)
if (result.success) {
expect(result.data.purchaseDate).toBeUndefined()
}
})
it('should reject invalid purchaseDate format', () => {
const invalidData = {
name: 'Test Bike',
purchaseDate: 'invalid-date',
}
const result = bikeSchema.safeParse(invalidData)
expect(result.success).toBe(false)
})
})
describe('wearPartSchema', () => {