teqo/tests/unit/campaignActionContext.unit.spec.ts
Francisco Ignácio Fontoura Solla 01e52834e2 B19: Gerenciar assessores (/campanha/assessores)
Lista+detalhe única de edição para coordinator/candidate: nome, e-mail e
celular com auto-save debounced (edit-where-you-see-it); carteira de
municípios por chips com agregação de território de identidade,
adição/remoção com UI otimista; criação inline no topo da tabela; ação de
WhatsApp por assessor; reset de senha via e-mail (bloqueado para
placeholders @planilha.invalid). Alinha access de update/phone/atribuição
de município a isCampaignUnrestricted (coordinator + candidate).

Sem migration. Testes int (campaignAdvisorManagement) + unit (schema e
portfólio de municípios) cobrindo access, conflito de e-mail único, cap de
assessores por município e agregação por território/ZE.
2026-07-25 02:40:47 -03:00

47 lines
1.7 KiB
TypeScript

// @vitest-environment node
import { describe, expect, it, vi } from 'vitest'
import type { CampaignUser } from '@/payload-types'
import {
reloadCampaignActor,
reloadUnrestrictedActor,
requireCampaignUser,
} from '@/utilities/campaignActionContext'
describe('campaign action context', () => {
it('preserves the generic authentication error', async () => {
await expect(requireCampaignUser(async () => null)).rejects.toThrow('Autenticação necessária.')
})
it('reloads the actor role with the transaction req', async () => {
const staleActor = { id: 9, role: 'coordinator' } as CampaignUser
const currentActor = { ...staleActor, role: 'leader' } as CampaignUser
const findByID = vi.fn().mockResolvedValue(currentActor)
const req = { transactionID: 21 }
await expect(reloadCampaignActor({ findByID }, staleActor, req)).resolves.toBe(currentActor)
expect(findByID).toHaveBeenCalledWith({
collection: 'campaignUser',
id: staleActor.id,
depth: 0,
overrideAccess: true,
req,
})
})
it('accepts coordinator and candidate as unrestricted', async () => {
const findByID = vi.fn()
for (const role of ['coordinator', 'candidate'] as const) {
const actor = { id: 1, role, collection: 'campaignUser' } as CampaignUser
findByID.mockResolvedValueOnce(actor)
await expect(reloadUnrestrictedActor({ findByID }, actor, 'denied')).resolves.toBe(actor)
}
})
it('rejects advisor for unrestricted reload', async () => {
const actor = { id: 2, role: 'advisor', collection: 'campaignUser' } as CampaignUser
const findByID = vi.fn().mockResolvedValue(actor)
await expect(reloadUnrestrictedActor({ findByID }, actor, 'denied')).rejects.toThrow('denied')
})
})