mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 23:45:18 +00:00
Substitui o modelo de MunicipalityUpdate (kind/semanal/urgente/nota/sinal + signalType) por um modelo unificado: body obrigatório + polarity (boa/neutra/ruim) + urgent + adversarySignal. - Schema: polarity enum obrigatório, urgent boolean default false, adversarySignal boolean - Wizard: novo WizardUpdateBodyStep com campo de texto + polaridade + urgente - Lista: controle unificado de atualização com polaridade inline - Feed: exibe polaridade como badge colorido + indicador de urgência - V2 status strip: atualização rápida de polaridade - E11: queries atualizadas para polarity + adversarySignal - Migração: 20260807_030000_unify_municipality_update (backfill polarity=neutra, urgent de kind, adversarySignal de kind+signalType) - Testes: 18/18 integração C87, 593/593 total, 1399/1399 unitários - Fix: testes de state deputy usavam nomes fixos que colidiam entre execuções
53 lines
2.3 KiB
TypeScript
53 lines
2.3 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { CAMPAIGN_ACTIONS_HOME } from '@/lib/campaignActionRoutes'
|
|
import { resolveLeadershipQuickActions } from '@/lib/campaignQuickActionLeadership'
|
|
|
|
describe('resolveLeadershipQuickActions', () => {
|
|
it('returns only update-leadership on the list without prefill', () => {
|
|
const actions = resolveLeadershipQuickActions('/campanha/liderancas', 'coordinator', {})
|
|
expect(actions).toHaveLength(1)
|
|
expect(actions?.[0]?.id).toBe('update-leadership')
|
|
expect(actions?.[0]?.href).toBe(
|
|
`${CAMPAIGN_ACTIONS_HOME}/atualizar-lideranca?from=%2Fcampanha%2Fliderancas`,
|
|
)
|
|
})
|
|
|
|
it('returns five wizard actions on detail with municipality prefill when N=1', () => {
|
|
const actions = resolveLeadershipQuickActions('/campanha/liderancas/42', 'coordinator', {
|
|
leadershipId: 42,
|
|
municipalitySlug: 'cairu',
|
|
})
|
|
expect(actions?.map((action) => action.id)).toEqual([
|
|
'update-votes',
|
|
'register-update',
|
|
'change-trend',
|
|
'update-leadership',
|
|
'register-demand',
|
|
])
|
|
expect(actions?.find((action) => action.id === 'update-votes')?.href).toBe(
|
|
`${CAMPAIGN_ACTIONS_HOME}/atualizar-votos?municipio=cairu&from=%2Fcampanha%2Fliderancas%2F42`,
|
|
)
|
|
expect(actions?.find((action) => action.id === 'update-leadership')?.href).toBe(
|
|
`${CAMPAIGN_ACTIONS_HOME}/atualizar-lideranca?municipio=cairu&leadershipId=42&from=%2Fcampanha%2Fliderancas%2F42`,
|
|
)
|
|
})
|
|
|
|
it('degrades update-leadership to ficha when N>1 (no municipality slug)', () => {
|
|
const actions = resolveLeadershipQuickActions('/campanha/liderancas/7', 'advisor', {
|
|
leadershipId: 7,
|
|
})
|
|
expect(actions?.find((action) => action.id === 'update-leadership')?.href).toBe(
|
|
'/campanha/liderancas/7',
|
|
)
|
|
expect(actions?.find((action) => action.id === 'update-votes')?.href).toBe(
|
|
`${CAMPAIGN_ACTIONS_HOME}/atualizar-votos?from=%2Fcampanha%2Fliderancas%2F7`,
|
|
)
|
|
})
|
|
|
|
it('returns null outside leadership routes', () => {
|
|
expect(resolveLeadershipQuickActions('/campanha/municipios', 'coordinator', {})).toBeNull()
|
|
expect(resolveLeadershipQuickActions('/campanha/liderancas/nova', 'coordinator', {})).toBeNull()
|
|
expect(resolveLeadershipQuickActions('/campanha/liderancas', 'leader', {})).toBeNull()
|
|
})
|
|
})
|