teqo/tests/unit/campaignPageChrome.unit.spec.ts
Francisco Solla 59983b33f7 feat(campanha): C15 — FullCalendar em /campanha/agenda
Issue #390 — entrada operacional staff com FullCalendar v7 route-local
(semana/mês/lista), filtros compartilháveis por município/deputado/tag,
criação pelo slot, detalhe por URL e remarcação drag/resize sob RBAC,
transação e lock por atividade.

- /campanha/atividades e giros permanecem como lista/fluxos legados
- Sem migration/collection nova; reutiliza activity de C14
- Fuso Bahia, range exclusivo, erro/revert, loading/empty testados
- Leader negado, advisor limitado pelo access atual
- E2E cobre filtros, drag, mobile 390x844 e slot prefill
- Int specs cobrem RBAC, concorrência e defense-in-depth

Impl: docs/plans/fullcalendar-agenda-campanha-impl.md
2026-08-07 04:37:36 -03:00

59 lines
2.2 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
campaignPageMetadata,
campaignPageMetadataFromCatalog,
resolveCampaignPageChrome,
} from '@/lib/campaignPageChrome'
describe('campaignPageChrome', () => {
it('returns null for home', () => {
expect(resolveCampaignPageChrome('/campanha', 'coordinator')).toBeNull()
expect(resolveCampaignPageChrome('/campanha/', 'advisor')).toBeNull()
})
it('resolves section list chrome without prose subtitle', () => {
expect(resolveCampaignPageChrome('/campanha/municipios', 'coordinator')).toEqual({
title: 'Municípios',
})
expect(resolveCampaignPageChrome('/campanha/liderancas', 'advisor')).toEqual({
title: 'Lideranças',
})
expect(resolveCampaignPageChrome('/campanha/agenda', 'coordinator')).toEqual({
title: 'Agenda',
})
})
it('returns null for entity detail pages (chrome set per route)', () => {
expect(resolveCampaignPageChrome('/campanha/municipios/cairu', 'coordinator')).toBeNull()
expect(resolveCampaignPageChrome('/campanha/liderancas/42', 'advisor')).toBeNull()
expect(resolveCampaignPageChrome('/campanha/atividades/foo', 'coordinator')).toBeNull()
})
it('keeps section title on parallel municipio v2 route (B147 soft-dep)', () => {
expect(resolveCampaignPageChrome('/campanha/municipio/cairu/v2', 'coordinator')).toEqual({
title: 'Municípios',
})
})
it('resolves quadro without role-based prose subtitle', () => {
expect(resolveCampaignPageChrome('/campanha/quadro', 'advisor')).toEqual({ title: 'Quadro' })
expect(resolveCampaignPageChrome('/campanha/quadro', 'coordinator')).toEqual({
title: 'Quadro',
})
})
it('keeps prose subtitle on out-of-scope sections', () => {
expect(resolveCampaignPageChrome('/campanha/conceitos', 'coordinator')?.subtitle).toContain(
'cada número',
)
expect(resolveCampaignPageChrome('/campanha/perfil', 'coordinator')?.subtitle).toContain(
'biometria',
)
})
it('builds tab metadata from catalog', () => {
expect(campaignPageMetadataFromCatalog('contatos').title).toBe('Contatos')
expect(campaignPageMetadata(null).title).toBe('Início')
})
})