mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-14 17:43:04 +00:00
- shareLink ganha modo (direct|announcement), pool de destinos com "Destino no ar" por linha e dados do evento; destination escalar sai via migration com backfill lossless (legado vira direct com destino no ar) - página de anúncio pública portada classe-a-classe, header campaign-site extraído (CampaignPageHeader) e ativação/troca sem reload por poll da rota /api/share-link/<slug>/live (fail-closed, no-store) - agenda Google (action=TEMPLATE) + .ics por rota sob o slug; compartilhar o link curto (kind event); S19 intacto e 404 uniforme preservado Related #1268
65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { buildShareLinkAnnouncementView } from '@/lib/shareLinkAnnouncement'
|
|
|
|
describe('buildShareLinkAnnouncementView', () => {
|
|
it('formats the Bahia event label and trims the location', () => {
|
|
const view = buildShareLinkAnnouncementView({
|
|
link: {
|
|
slug: 'plenaria-saude',
|
|
title: 'Plenária da saúde',
|
|
description: 'Encontro online da campanha.',
|
|
startsAt: '2026-10-03T22:00:00.000Z',
|
|
endsAt: '2026-10-04T00:00:00.000Z',
|
|
location: ' Online ',
|
|
},
|
|
imageUrl: '/api/media/file/plenaria.jpg',
|
|
})
|
|
|
|
expect(view).toEqual({
|
|
slug: 'plenaria-saude',
|
|
title: 'Plenária da saúde',
|
|
description: 'Encontro online da campanha.',
|
|
imageUrl: '/api/media/file/plenaria.jpg',
|
|
imageAlt: 'Plenária da saúde',
|
|
eventLabel: 'Sábado, 3 de outubro · 19h',
|
|
location: 'Online',
|
|
startsAt: '2026-10-03T22:00:00.000Z',
|
|
endsAt: '2026-10-04T00:00:00.000Z',
|
|
})
|
|
})
|
|
|
|
it('prefers the media alt and nulls the absent event data', () => {
|
|
const view = buildShareLinkAnnouncementView({
|
|
link: {
|
|
slug: 'sem-data',
|
|
title: 'Atividade',
|
|
description: 'Descrição',
|
|
image: { alt: 'Foto do encontro' },
|
|
location: ' ',
|
|
},
|
|
imageUrl: null,
|
|
})
|
|
|
|
expect(view.imageAlt).toBe('Foto do encontro')
|
|
expect(view.imageUrl).toBeNull()
|
|
expect(view.eventLabel).toBeNull()
|
|
expect(view.location).toBeNull()
|
|
expect(view.startsAt).toBeNull()
|
|
expect(view.endsAt).toBeNull()
|
|
})
|
|
|
|
it('hides the event label when the date cannot be parsed', () => {
|
|
const view = buildShareLinkAnnouncementView({
|
|
link: {
|
|
slug: 'data-invalida',
|
|
title: 'Atividade',
|
|
description: 'Descrição',
|
|
startsAt: 'lixo',
|
|
},
|
|
imageUrl: null,
|
|
})
|
|
|
|
expect(view.eventLabel).toBeNull()
|
|
})
|
|
})
|