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.
51 lines
2.0 KiB
51 lines
2.0 KiB
import { describe, expect, it } from 'vitest';
|
|
import { revisarCapitulo, type CambiosDelCapitulo } from './panel-capitulos';
|
|
|
|
/** Un capítulo válido, del que cada prueba estropea una cosa. */
|
|
const bueno = (cambios: Partial<CambiosDelCapitulo> = {}): CambiosDelCapitulo => ({
|
|
titulo: 'El estribillo',
|
|
resumen: 'Lo que se repite y por qué.',
|
|
cuerpo: 'Un estribillo es lo que queda cuando la canción se acaba.',
|
|
estado: 'publicado',
|
|
orden: 3,
|
|
...cambios
|
|
});
|
|
|
|
describe('revisarCapitulo', () => {
|
|
it('deja pasar lo que está bien', () => {
|
|
expect(revisarCapitulo(bueno())).toEqual({});
|
|
});
|
|
|
|
it('no admite un título vacío', () => {
|
|
expect(revisarCapitulo(bueno({ titulo: '' })).titulo).toBeTruthy();
|
|
expect(revisarCapitulo(bueno({ titulo: ' ' })).titulo).toBeTruthy();
|
|
});
|
|
|
|
it('no deja publicar un capítulo sin texto', () => {
|
|
// Es el error que de verdad se comete: se crea la ficha, se pone
|
|
// «publicado» para verla, y queda en la web una página en blanco.
|
|
expect(revisarCapitulo(bueno({ cuerpo: ' ' })).cuerpo).toBeTruthy();
|
|
});
|
|
|
|
it('pero en borrador se puede escribir a medias', () => {
|
|
// Escribir a medias es lo normal mientras no está publicado, y avisar de
|
|
// ello en cada guardado convertiría el aviso en ruido.
|
|
expect(revisarCapitulo(bueno({ cuerpo: '', estado: 'borrador' }))).toEqual({});
|
|
});
|
|
|
|
it('rechaza un estado que no existe', () => {
|
|
// Llega del formulario, y lo que llega del formulario lo escribe cualquiera.
|
|
expect(
|
|
revisarCapitulo(bueno({ estado: 'inventado' as CambiosDelCapitulo['estado'] })).estado
|
|
).toBeTruthy();
|
|
});
|
|
|
|
it('el orden es un entero y no negativo', () => {
|
|
expect(revisarCapitulo(bueno({ orden: -1 })).orden).toBeTruthy();
|
|
expect(revisarCapitulo(bueno({ orden: 1.5 })).orden).toBeTruthy();
|
|
// `Number('')` es 0 y `Number('hola')` es NaN: los dos llegan del formulario.
|
|
expect(revisarCapitulo(bueno({ orden: Number.NaN })).orden).toBeTruthy();
|
|
expect(revisarCapitulo(bueno({ orden: 0 })).orden).toBeUndefined();
|
|
});
|
|
});
|