mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 06:43:06 +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
90 lines
3.3 KiB
TypeScript
90 lines
3.3 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { CAMPAIGN_WIZARD_ACTION_SLUGS } from '@/lib/campaignActionRoutes'
|
|
import { UNCOVERED_MUNICIPALITIES_LIST_HREF } from '@/lib/campaignHomeActions'
|
|
import {
|
|
isMunicipalitiesListPath,
|
|
parseMunicipalityDetailSlug,
|
|
resolveMunicipalityDetailQuickActions,
|
|
resolveMunicipalityListQuickActions,
|
|
resolveMunicipalityQuickActionsForPath,
|
|
} from '@/lib/campaignMunicipalityQuickActions'
|
|
|
|
const wizardActionIds = [
|
|
'update-votes',
|
|
'register-update',
|
|
'change-trend',
|
|
'update-leadership',
|
|
'register-demand',
|
|
] as const
|
|
|
|
describe('campaignMunicipalityQuickActions paths', () => {
|
|
it('detects the municipality list path', () => {
|
|
expect(isMunicipalitiesListPath('/campanha/municipios')).toBe(true)
|
|
expect(isMunicipalitiesListPath('/campanha/municipios/')).toBe(true)
|
|
expect(isMunicipalitiesListPath('/campanha/municipios/cairu')).toBe(false)
|
|
})
|
|
|
|
it('parses municipality detail slugs', () => {
|
|
expect(parseMunicipalityDetailSlug('/campanha/municipios/cairu')).toBe('cairu')
|
|
expect(parseMunicipalityDetailSlug('/campanha/municipios/cairu/editar')).toBe('cairu')
|
|
expect(parseMunicipalityDetailSlug('/campanha/municipios')).toBeUndefined()
|
|
})
|
|
})
|
|
|
|
describe('resolveMunicipalityListQuickActions', () => {
|
|
it('mirrors the Início staff catalog without municipality prefill', () => {
|
|
const actions = resolveMunicipalityListQuickActions('coordinator')
|
|
expect(actions.map((action) => action.id)).toEqual([
|
|
...wizardActionIds,
|
|
'uncovered-municipalities',
|
|
])
|
|
expect(actions.find((action) => action.id === 'update-votes')?.href).toBe(
|
|
'/campanha/acoes/atualizar-votos',
|
|
)
|
|
expect(actions.find((action) => action.id === 'uncovered-municipalities')?.href).toBe(
|
|
UNCOVERED_MUNICIPALITIES_LIST_HREF,
|
|
)
|
|
})
|
|
|
|
it('returns nothing for leader', () => {
|
|
expect(resolveMunicipalityListQuickActions('leader')).toEqual([])
|
|
})
|
|
})
|
|
|
|
describe('resolveMunicipalityDetailQuickActions', () => {
|
|
it('prefills wizard hrefs and omits uncovered municipalities', () => {
|
|
const actions = resolveMunicipalityDetailQuickActions('coordinator', 'cairu')
|
|
expect(actions.map((action) => action.id)).toEqual([...wizardActionIds])
|
|
expect(actions.find((action) => action.id === 'update-votes')?.href).toBe(
|
|
`/campanha/acoes/${CAMPAIGN_WIZARD_ACTION_SLUGS['update-votes']}?municipio=cairu`,
|
|
)
|
|
expect(actions.some((action) => action.id === 'uncovered-municipalities')).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('resolveMunicipalityQuickActionsForPath', () => {
|
|
it('routes list and detail paths', () => {
|
|
const list = resolveMunicipalityQuickActionsForPath('/campanha/municipios', 'advisor', {})
|
|
expect(list).toHaveLength(6)
|
|
|
|
const detail = resolveMunicipalityQuickActionsForPath(
|
|
'/campanha/municipios/feira-de-santana',
|
|
'candidate',
|
|
{},
|
|
)
|
|
expect(detail).toHaveLength(5)
|
|
expect(detail[0]?.href).toContain('municipio=feira-de-santana')
|
|
})
|
|
|
|
it('prefers context slug over pathname', () => {
|
|
const actions = resolveMunicipalityQuickActionsForPath(
|
|
'/campanha/municipios/feira-de-santana',
|
|
'coordinator',
|
|
{ municipalitySlug: 'cairu' },
|
|
)
|
|
expect(actions.find((action) => action.id === 'update-votes')?.href).toContain(
|
|
'municipio=cairu',
|
|
)
|
|
})
|
|
})
|