You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.4 KiB
102 lines
3.4 KiB
|
1 month ago
|
import { describe, expect, it } from 'vitest';
|
||
|
|
import { argumentosDeMuestra, aSlug, claveCanonica, comoDuracion, enLaBandeja } from './medios.mjs';
|
||
|
|
|
||
|
|
describe('claveCanonica', () => {
|
||
|
|
it('agrupa por disco y numera como la pista', () => {
|
||
|
|
const clave = claveCanonica(
|
||
|
|
{ album: 'dos-orillas', numero: 3 },
|
||
|
|
'media-verdad',
|
||
|
|
'subidas/loquesea.mp3',
|
||
|
|
''
|
||
|
|
);
|
||
|
|
expect(clave).toBe('dos-orillas/03-media-verdad.mp3');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('manda a singles lo que no tiene disco', () => {
|
||
|
|
// Un tema suelto no ocupa ninguna posición, así que no lleva número.
|
||
|
|
const clave = claveCanonica({}, 'dorina', 'subidas/Senza Paura - Dorina.mp3', '');
|
||
|
|
expect(clave).toBe('singles/dorina.mp3');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('distingue las alternativas musicales del arreglo principal', () => {
|
||
|
|
const clave = claveCanonica(
|
||
|
|
{ album: 'como-si-nada', numero: 1 },
|
||
|
|
'como-si-nada',
|
||
|
|
'subidas/orq.mp3',
|
||
|
|
'-orquestal'
|
||
|
|
);
|
||
|
|
expect(clave).toBe('como-si-nada/01-como-si-nada-orquestal.mp3');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('conserva la extensión, en minúsculas', () => {
|
||
|
|
expect(claveCanonica({}, 'dorina', 'subidas/DORINA.WAV', '')).toBe('singles/dorina.wav');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('no numera un single aunque traiga número', () => {
|
||
|
|
// El número solo tiene sentido dentro de un disco; el esquema lo ignora,
|
||
|
|
// y el nombre del archivo tiene que decir lo mismo.
|
||
|
|
expect(claveCanonica({ numero: 4 }, 'dorina', 'subidas/x.mp3', '')).toBe('singles/dorina.mp3');
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('enLaBandeja', () => {
|
||
|
|
it('reconoce lo que acaba de subir el panel', () => {
|
||
|
|
expect(enLaBandeja('subidas/Senza Paura - Dorina.mp3')).toBe(true);
|
||
|
|
// El panel puede escribir la clave con barra inicial.
|
||
|
|
expect(enLaBandeja('/subidas/dorina.mp3')).toBe(true);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('deja en paz lo que ya está colocado', () => {
|
||
|
|
expect(enLaBandeja('singles/dorina.mp3')).toBe(false);
|
||
|
|
// Un disco que se llamara así no debe confundirse con la bandeja.
|
||
|
|
expect(enLaBandeja('subidas-de-tono/01-tema.mp3')).toBe(false);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('comoDuracion', () => {
|
||
|
|
it('escribe m:ss como lo espera el esquema', () => {
|
||
|
|
expect(comoDuracion(277.752)).toBe('4:38');
|
||
|
|
expect(comoDuracion(65)).toBe('1:05');
|
||
|
|
expect(comoDuracion(600)).toBe('10:00');
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('aSlug', () => {
|
||
|
|
it('coincide con el del esquema', () => {
|
||
|
|
expect(aSlug('Vals criollo peruano')).toBe('vals-criollo-peruano');
|
||
|
|
expect(aSlug('Versión orquestal')).toBe('version-orquestal');
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('argumentosDeMuestra', () => {
|
||
|
|
const args = argumentosDeMuestra(
|
||
|
|
'media/audio/singles/dorina.mp3',
|
||
|
|
'static/muestras/singles/dorina.mp3',
|
||
|
|
30,
|
||
|
|
40
|
||
|
|
);
|
||
|
|
|
||
|
|
it('corta a la entrada, no a la salida', () => {
|
||
|
|
// Con `-ss` detrás de `-i` el filtro sigue viendo los tiempos del
|
||
|
|
// original: el fundido cae seis segundos después de empezar y el resto
|
||
|
|
// del fragmento sale mudo. Pasó de verdad.
|
||
|
|
expect(args.indexOf('-ss')).toBeLessThan(args.indexOf('-i'));
|
||
|
|
});
|
||
|
|
|
||
|
|
it('funde los últimos cuatro segundos, no otros', () => {
|
||
|
|
expect(args).toContain('afade=t=out:st=36:d=4');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('no funde antes de empezar en un fragmento corto', () => {
|
||
|
|
// Un tema de tres segundos no da para un fundido de cuatro: el inicio del
|
||
|
|
// fundido no puede ser negativo.
|
||
|
|
const cortos = argumentosDeMuestra('a.mp3', 'b.mp3', 0, 3);
|
||
|
|
expect(cortos).toContain('afade=t=out:st=0:d=4');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('recorta lo que se le pide', () => {
|
||
|
|
expect(args[args.indexOf('-ss') + 1]).toBe('30');
|
||
|
|
expect(args[args.indexOf('-t') + 1]).toBe('40');
|
||
|
|
});
|
||
|
|
});
|