teqo-backup/tests/unit/postsDateFormats.unit.spec.ts
Francisco Solla 41dbb564c6 feat(S1): seção de conteúdos na home de campanha (artigos)
Bento 1+4 no desktop e carrossel 1/tela no mobile (~390px) lendo o post
collection com isPostVisible fail-closed; seção some inteira sem posts
visíveis. Zero migration/Consent; home vira ISR com tag posts +
revalidate=300 (label relativa não congela).
2026-08-18 05:07:26 +00:00

51 lines
1.9 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from 'vitest'
import { formatRelativePostDate, POST_TYPE_BADGE_LABELS } from '@/utilities/posts'
describe('formatRelativePostDate', () => {
afterEach(() => {
vi.useRealTimers()
})
it('reads missing or invalid dates as null', () => {
expect(formatRelativePostDate(undefined)).toBeNull()
expect(formatRelativePostDate(null)).toBeNull()
expect(formatRelativePostDate('not-a-date')).toBeNull()
})
it('reads anything up to a minute ago as "agora"', () => {
vi.setSystemTime(new Date('2026-08-17T12:00:00Z'))
expect(formatRelativePostDate('2026-08-17T12:00:00Z')).toBe('agora')
expect(formatRelativePostDate('2026-08-17T11:59:59Z')).toBe('agora')
expect(formatRelativePostDate('2026-08-17T12:00:30Z')).toBe('agora')
})
it('formats minutes, hours and days in Portuguese with auto pluralization', () => {
vi.setSystemTime(new Date('2026-08-17T12:00:00Z'))
expect(formatRelativePostDate('2026-08-17T11:55:00Z')).toBe('há 5 minutos')
expect(formatRelativePostDate('2026-08-17T10:30:00Z')).toBe('há 1 hora')
expect(formatRelativePostDate('2026-08-17T08:00:00Z')).toBe('há 4 horas')
expect(formatRelativePostDate('2026-08-15T12:00:00Z')).toBe('há 2 dias')
})
it('floors partial units so 1h59m reads as "há 1 hora"', () => {
vi.setSystemTime(new Date('2026-08-17T12:00:00Z'))
expect(formatRelativePostDate('2026-08-17T10:01:00Z')).toBe('há 1 hora')
})
it('falls back to the long absolute date past 30 days', () => {
vi.setSystemTime(new Date('2026-08-17T12:00:00Z'))
expect(formatRelativePostDate('2026-07-17T12:00:00Z')).toBe('17 de julho de 2026')
})
})
describe('POST_TYPE_BADGE_LABELS', () => {
it('spells the four types in the singular for card badges', () => {
expect(POST_TYPE_BADGE_LABELS).toEqual({
noticia: 'Notícia',
campanha: 'Campanha',
artigo: 'Artigo',
evento: 'Evento',
})
})
})