Files
carmanagement/apps/api/src/modules/operations.schemas.test.ts
T
2026-06-10 00:40:19 -04:00

43 lines
3.0 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { createSchema as complaintCreateSchema, listQuerySchema as complaintListQuerySchema, updateSchema as complaintUpdateSchema } from './complaints/complaint.schemas'
import { historyQuerySchema, preferencesSchema, unreadQuerySchema } from './notifications/notification.schemas'
import { offerSchema } from './offers/offer.schemas'
import { cancelSchema, checkoutSchema, startTrialSchema } from './subscriptions/subscription.schemas'
import { inviteSchema, roleSchema } from './team/team.schemas'
import { listQuerySchema as reviewListQuerySchema, replySchema } from './reviews/review.schemas'
import { reportQuerySchema, summaryQuerySchema } from './analytics/analytics.schemas'
describe('operational schemas', () => {
it('validates offers, complaints, and reviews without inventing impossible statuses', () => {
expect(offerSchema.parse({
title: 'Summer',
type: 'PERCENTAGE',
discountValue: 15,
validFrom: '2026-07-01T00:00:00.000Z',
validUntil: '2026-08-01T00:00:00.000Z',
})).toMatchObject({ appliesToAll: true, categories: [], vehicleIds: [], isActive: true, isPublic: true })
expect(offerSchema.safeParse({ title: '', type: 'PERCENTAGE', discountValue: 15, validFrom: 'bad', validUntil: 'bad' }).success).toBe(false)
expect(complaintCreateSchema.parse({ category: 'BILLING', subject: 'Wrong invoice' })).toMatchObject({ severity: 'LEVEL_1' })
expect(complaintUpdateSchema.safeParse({ status: 'IGNORED' }).success).toBe(false)
expect(complaintListQuerySchema.parse({ page: '2', pageSize: '25' })).toMatchObject({ page: 2, pageSize: 25 })
expect(replySchema.safeParse({ companyReply: '' }).success).toBe(false)
expect(reviewListQuerySchema.safeParse({ rating: '6' }).success).toBe(false)
})
it('validates subscriptions, team roles, notifications, and analytics query defaults', () => {
expect(checkoutSchema.safeParse({ plan: 'PRO', billingPeriod: 'MONTHLY', currency: 'MAD', provider: 'PAYPAL', successUrl: 'https://ok.example.test', failureUrl: 'https://fail.example.test' }).success).toBe(true)
expect(startTrialSchema.parse({ plan: 'STARTER', billingPeriod: 'ANNUAL' })).toMatchObject({ currency: 'MAD' })
expect(cancelSchema.parse({})).toEqual({ mode: 'period_end' })
expect(inviteSchema.safeParse({ firstName: 'A', lastName: 'B', email: 'agent@example.test', role: 'OWNER' }).success).toBe(false)
expect(roleSchema.safeParse({ role: 'AGENT' }).success).toBe(true)
expect(preferencesSchema.safeParse([{ notificationType: 'BOOKING', channel: 'EMAIL', enabled: true }]).success).toBe(true)
expect(unreadQuerySchema.parse({ unread: 'true' })).toEqual({ unread: 'true' })
expect(historyQuerySchema.parse({ limit: '100' })).toEqual({ limit: 100 })
expect(historyQuerySchema.safeParse({ limit: '501' }).success).toBe(false)
expect(summaryQuerySchema.parse({})).toEqual({ period: '30d' })
expect(reportQuerySchema.parse({})).toEqual({ format: 'JSON' })
})
})