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.
senzapaura_es/src/lib/server/panel-capitulos.spec.ts

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();
});
});

Powered by TurnKey Linux.