teqo-backup/tests/unit/jingle.unit.spec.ts
Francisco Solla c7eeb5dbd8
Some checks are pending
Deploy / preflight (push) Waiting to run
Deploy / verify (push) Blocked by required conditions
Deploy / deploy staging (teqo-staging) (push) Blocked by required conditions
Deploy / requeue when main advanced (push) Blocked by required conditions
Deploy / deploy production (teqo-1313) (push) Blocked by required conditions
feat(S21): jingles de Jorge Solla no site público — ouvir e baixar (Closes #1222)
2026-09-20 01:48:20 -03:00

62 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { jingleDownloadFilename, toJingleViewModel } from '@/lib/jingle'
describe('jingleDownloadFilename', () => {
it.each([
['axe', 'Jorge Solla 1313 - Axé.mp3', 'jorge-solla-1313-axe.mp3'],
['forro', 'JORGE SOLLA 1313 - FORRO.MP3', 'jorge-solla-1313-forro.mp3'],
['Pagodão', 'Jorge Solla 1313 - Pagodão.wav', 'jorge-solla-1313-pagodao.wav'],
['axe-2026', 'audio.mp3', 'jorge-solla-1313-axe-2026.mp3'],
])('derives %s → %s', (slug, filename, expected) => {
expect(jingleDownloadFilename(slug, filename)).toBe(expected)
})
it('falls back to the generic base when the slug normalizes to nothing', () => {
expect(jingleDownloadFilename('---', 'audio.mp3')).toBe('jorge-solla-1313-jingle.mp3')
expect(jingleDownloadFilename(null, null)).toBe('jorge-solla-1313-jingle.mp3')
})
it('falls back to mp3 when the stored filename has no usable extension', () => {
expect(jingleDownloadFilename('axe', 'Jorge Solla 1313 - Axé')).toBe('jorge-solla-1313-axe.mp3')
expect(jingleDownloadFilename('axe', 'audio.')).toBe('jorge-solla-1313-axe.mp3')
expect(jingleDownloadFilename('axe', 'audio')).toBe('jorge-solla-1313-axe.mp3')
})
})
describe('toJingleViewModel', () => {
const jingle = { id: 7, title: 'Axé', slug: 'axe' }
it('fails closed without a readable cover or audio', () => {
expect(toJingleViewModel({ jingle, cover: null, audio: { url: '/a.mp3' } })).toBeNull()
expect(toJingleViewModel({ jingle, cover: { url: '/c.jpg' }, audio: null })).toBeNull()
expect(toJingleViewModel({ jingle, cover: { url: null }, audio: { url: '/a.mp3' } })).toBeNull()
})
it('maps the card and derives the download name', () => {
expect(
toJingleViewModel({
jingle,
cover: { url: '/capa.jpg', alt: 'Capa oficial' },
audio: { url: '/axe.mp3', filename: 'Jorge Solla 1313 - Axé.mp3' },
}),
).toEqual({
id: 7,
title: 'Axé',
coverUrl: '/capa.jpg',
coverAlt: 'Capa oficial',
audioUrl: '/axe.mp3',
downloadFilename: 'jorge-solla-1313-axe.mp3',
})
})
it('falls back to a readable cover alt', () => {
expect(
toJingleViewModel({
jingle,
cover: { url: '/capa.jpg', alt: ' ' },
audio: { url: '/axe.mp3' },
})?.coverAlt,
).toBe('Capa do jingle Axé de Jorge Solla 1313')
})
})