teqo/tests/int/schemaPrimitives.int.spec.ts
Francisco Ignácio Fontoura Solla bcac665cb5 Ship /campanha nuclei MVP with RBAC, invites, and vote estimates.
Adds electoral nuclei, leaderships, updates, and WhatsApp invite flows behind campaign auth, plus the consolidated schema migration that Vercel applies on deploy.
2026-07-18 15:01:56 -03:00

35 lines
1.3 KiB
TypeScript

// @vitest-environment node
import { describe, expect, it } from 'vitest'
import {
brazilianMobile,
nullablePersistedEmail,
positiveRelationshipId,
trimmedNullableText,
trimmedOptionalText,
optionalPersistedEmail,
} from '@/lib/schemas/primitives'
describe('persisted schema primitives', () => {
it('accepts positive numeric relationship IDs but not numeric strings', () => {
expect(positiveRelationshipId.parse(4)).toBe(4)
expect(() => positiveRelationshipId.parse('4')).toThrow()
})
it('preserves optional and nullable trimmed text semantics', () => {
expect(trimmedOptionalText(20).parse(' texto ')).toBe('texto')
expect(trimmedOptionalText(20).parse(' ')).toBeUndefined()
expect(trimmedNullableText(20).parse(' ')).toBeNull()
expect(trimmedNullableText(20).parse(null)).toBeNull()
expect(trimmedNullableText(20).parse(undefined)).toBeUndefined()
})
it('normalizes Brazilian mobile phones and keeps email clearing semantics distinct', () => {
expect(brazilianMobile.parse('(71) 99999-0000')).toBe('71999990000')
expect(() => brazilianMobile.parse('7199990000')).toThrow('Celular brasileiro inválido.')
expect(optionalPersistedEmail.parse('')).toBeUndefined()
expect(nullablePersistedEmail.parse('')).toBeNull()
expect(nullablePersistedEmail.parse(null)).toBeNull()
})
})