mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 15:13:07 +00:00
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
62 lines
2.4 KiB
TypeScript
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')
|
|
})
|
|
})
|