teqo-backup/tests/unit/advisorSchema.unit.spec.ts
Francisco Ignácio Fontoura Solla 26b2205c3a B154 — criar assessor inline no popover da lista de municípios
Closes #352

- POST /campanha/municipios/advisors aceita body de criação (name) na union;
  createMunicipalityAdvisorRecord cria campaignUser advisor (stub
  <slug>@criado.invalid, senha aleatória) e atribui ao município na mesma
  transação (cap 10 com rollback, lock municipality-advisors:{id})
- MunicipalityAdvisorCreateProvider compartilha o assessor criado entre linhas;
  opção "+ Criar assessor" e chip otimista com id temporário no control
- advisorNameSchema unificado em primitives.ts; predicado de placeholder cobre
  @criado.invalid (reset de senha e célula de e-mail tratam stubs inline)
- Destrava o spec e2e de municipios (falhas pré-existentes em main): key
  warning do fragment trailing de MunicipalityFilters; settle-wait da animação
  do Drawer no teste B136
2026-08-03 22:46:06 -03:00

52 lines
2.2 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
isPlanilhaPlaceholderEmail,
planilhaPlaceholderEmailForAdvisor,
stubCampaignUserEmailFor,
} from '@/lib/schemas/advisor'
describe('isPlanilhaPlaceholderEmail', () => {
it('detects the E4R seed suffix case-insensitively', () => {
expect(isPlanilhaPlaceholderEmail('edizio@planilha.invalid')).toBe(true)
expect(isPlanilhaPlaceholderEmail('Edizio@Planilha.Invalid')).toBe(true)
})
it('detects the B154 inline-create suffix case-insensitively', () => {
expect(isPlanilhaPlaceholderEmail('joao@criado.invalid')).toBe(true)
expect(isPlanilhaPlaceholderEmail('Maria-Santos-2@Criado.Invalid')).toBe(true)
})
it('rejects real emails and empty values', () => {
expect(isPlanilhaPlaceholderEmail('edizio@example.com')).toBe(false)
expect(isPlanilhaPlaceholderEmail('joao@criado.com.br')).toBe(false)
expect(isPlanilhaPlaceholderEmail('')).toBe(false)
expect(isPlanilhaPlaceholderEmail(null)).toBe(false)
expect(isPlanilhaPlaceholderEmail(undefined)).toBe(false)
})
})
describe('planilhaPlaceholderEmailForAdvisor', () => {
it('builds a stable assessor-{id}@planilha.invalid address', () => {
expect(planilhaPlaceholderEmailForAdvisor(42)).toBe('assessor-42@planilha.invalid')
})
})
describe('stubCampaignUserEmailFor', () => {
it('builds <slug-do-nome>@criado.invalid from the normalized name', () => {
expect(stubCampaignUserEmailFor('Maria Silva')).toBe('maria-silva@criado.invalid')
expect(stubCampaignUserEmailFor('João José')).toBe('joao-jose@criado.invalid')
})
it('appends -N from the second occurrence', () => {
expect(stubCampaignUserEmailFor('Maria Silva', 2)).toBe('maria-silva-2@criado.invalid')
expect(stubCampaignUserEmailFor('Maria Silva', 3)).toBe('maria-silva-3@criado.invalid')
})
it('falls back to a non-empty local part when the name has no letters or digits', () => {
// "!!!" passes min(2) but slugifies to "" — the stub must still be a
// valid e-mail local part instead of "@criado.invalid" (which would fail
// Payload's e-mail validation and surface as a dead-end generic error).
expect(stubCampaignUserEmailFor('!!!')).toBe('assessor@criado.invalid')
})
})