Spaces:
Sleeping
Sleeping
| import { | |
| weatherQuerySchema, | |
| detailedWeatherQuerySchema, | |
| weatherResultSchema, | |
| } from './weather.schema'; | |
| import { describe, it, expect } from 'vitest'; | |
| describe('weatherQuerySchema', () => { | |
| it('accepts lat/lng and defaults lang to "de"', () => { | |
| const parsed = weatherQuerySchema.parse({ lat: '52.5', lng: '13.4' }); | |
| expect(parsed).toEqual({ lat: '52.5', lng: '13.4', lang: 'de' }); | |
| }); | |
| it('keeps an explicit lang and optional date', () => { | |
| const parsed = weatherQuerySchema.parse({ | |
| lat: '1', | |
| lng: '2', | |
| date: '2026-07-01', | |
| lang: 'en', | |
| }); | |
| expect(parsed.lang).toBe('en'); | |
| expect(parsed.date).toBe('2026-07-01'); | |
| }); | |
| it('rejects missing lat/lng', () => { | |
| expect(weatherQuerySchema.safeParse({ lng: '13.4' }).success).toBe(false); | |
| expect(weatherQuerySchema.safeParse({ lat: '', lng: '13.4' }).success).toBe( | |
| false, | |
| ); | |
| }); | |
| }); | |
| describe('detailedWeatherQuerySchema', () => { | |
| it('requires a date', () => { | |
| expect( | |
| detailedWeatherQuerySchema.safeParse({ lat: '1', lng: '2' }).success, | |
| ).toBe(false); | |
| expect( | |
| detailedWeatherQuerySchema.safeParse({ | |
| lat: '1', | |
| lng: '2', | |
| date: '2026-07-01', | |
| }).success, | |
| ).toBe(true); | |
| }); | |
| }); | |
| describe('weatherResultSchema', () => { | |
| it('accepts a minimal current-weather result', () => { | |
| const r = weatherResultSchema.parse({ | |
| temp: 21, | |
| main: 'Clear', | |
| description: 'Klar', | |
| type: 'current', | |
| }); | |
| expect(r.temp).toBe(21); | |
| }); | |
| it('accepts a detailed result with hourly entries and a no_forecast error', () => { | |
| expect( | |
| weatherResultSchema.safeParse({ | |
| temp: 0, | |
| main: '', | |
| description: '', | |
| type: '', | |
| error: 'no_forecast', | |
| }).success, | |
| ).toBe(true); | |
| expect( | |
| weatherResultSchema.safeParse({ | |
| temp: 18, | |
| main: 'Rain', | |
| description: 'Regen', | |
| type: 'forecast', | |
| sunrise: '05:30', | |
| sunset: '21:10', | |
| precipitation_sum: 2.4, | |
| hourly: [ | |
| { | |
| hour: 9, | |
| temp: 17, | |
| precipitation: 0.1, | |
| precipitation_probability: 20, | |
| main: 'Clouds', | |
| wind: 12, | |
| humidity: 80, | |
| }, | |
| ], | |
| }).success, | |
| ).toBe(true); | |
| }); | |
| }); | |