Spaces:
Sleeping
Sleeping
| import { paginationQuerySchema } from './pagination.schema'; | |
| import { | |
| idSchema, | |
| idParamSchema, | |
| nonEmptyString, | |
| isoDateTime, | |
| } from './primitives.schema'; | |
| import { describe, it, expect } from 'vitest'; | |
| describe('@trek/shared primitives', () => { | |
| it('idSchema accepts positive integers, rejects others', () => { | |
| expect(idSchema.parse(1)).toBe(1); | |
| expect(idSchema.safeParse(0).success).toBe(false); | |
| expect(idSchema.safeParse(-3).success).toBe(false); | |
| expect(idSchema.safeParse(1.5).success).toBe(false); | |
| }); | |
| it('idParamSchema coerces string params to a positive int', () => { | |
| expect(idParamSchema.parse('42')).toBe(42); | |
| expect(idParamSchema.safeParse('abc').success).toBe(false); | |
| }); | |
| it('nonEmptyString trims and rejects empty', () => { | |
| expect(nonEmptyString.parse(' hi ')).toBe('hi'); | |
| expect(nonEmptyString.safeParse(' ').success).toBe(false); | |
| }); | |
| it('isoDateTime accepts an ISO timestamp', () => { | |
| expect(isoDateTime.safeParse('2026-05-25T08:38:14Z').success).toBe(true); | |
| expect(isoDateTime.safeParse('not-a-date').success).toBe(false); | |
| }); | |
| }); | |
| describe('@trek/shared pagination', () => { | |
| it('applies defaults and coerces', () => { | |
| expect(paginationQuerySchema.parse({})).toEqual({ page: 1, perPage: 50 }); | |
| expect(paginationQuerySchema.parse({ page: '2', perPage: '10' })).toEqual({ | |
| page: 2, | |
| perPage: 10, | |
| }); | |
| }); | |
| it('enforces bounds', () => { | |
| expect(paginationQuerySchema.safeParse({ perPage: 0 }).success).toBe(false); | |
| expect(paginationQuerySchema.safeParse({ perPage: 999 }).success).toBe( | |
| false, | |
| ); | |
| }); | |
| }); | |