diff --git a/e2e/navegacion.e2e.ts b/e2e/navegacion.e2e.ts index eb392a5..898e8c9 100644 --- a/e2e/navegacion.e2e.ts +++ b/e2e/navegacion.e2e.ts @@ -106,17 +106,37 @@ test.describe('Navegación', () => { test.describe('La página de error', () => { test('lleva su lámina y sale del paso', async ({ page }) => { + const respuestas: Record = {}; + page.on('response', (r) => { + if (r.url().includes('/errores/')) respuestas[r.url().split('/').pop()!] = r.status(); + }); + await page.goto('/no-existe-esto'); - const lamina = page.locator('.lamina img'); - await expect(lamina).toHaveAttribute('src', '/errores/404.webp'); - // Que exista el archivo, no solo la etiqueta. - expect(await lamina.evaluate((i: HTMLImageElement) => i.naturalWidth)).toBeGreaterThan(0); + // La lámina es el fondo de la pantalla, no una imagen dentro del contenido. + const pantalla = page.locator('.pantalla'); + await expect(pantalla).toHaveCSS('background-image', /errores\/404\.webp/); + // Y el archivo existe de verdad, no solo la regla que lo nombra. + expect(respuestas['404.webp']).toBe(200); await page.getByRole('link', { name: 'Volver al inicio' }).click(); await expect(page).toHaveURL('/'); }); + /* + * Va desnuda: un cartel a pantalla completa con la barra del sitio encima + * deja de ser un cartel. De un error se sale por la puerta que pone la + * propia página. + */ + test('no lleva cabecera, ni pie, ni reproductor', async ({ page }) => { + await page.goto('/no-existe-esto'); + + await expect(page.locator('header')).toHaveCount(0); + await expect(page.locator('footer')).toHaveCount(0); + await expect(page.getByRole('region', { name: 'Reproductor' })).toHaveCount(0); + await expect(page.getByRole('link', { name: 'Volver al inicio' })).toBeVisible(); + }); + /* * Sin esto, todo el que aterrice en un 404 se traería 686 KB de mp3 que a lo * mejor no va a escuchar. Es la razón de ser del `preload="none"`. @@ -128,7 +148,7 @@ test.describe('La página de error', () => { }); await page.goto('/no-existe-esto'); - await expect(page.locator('.lamina img')).toBeVisible(); + await expect(page.getByRole('button', { name: 'Poner música' })).toBeVisible(); expect(pedidos.some((u) => u.endsWith('.mp3'))).toBe(false); await page.getByRole('button', { name: 'Poner música' }).click(); diff --git a/src/lib/components/Etiquetas.svelte b/src/lib/components/Etiquetas.svelte index c66cbf3..041f127 100644 --- a/src/lib/components/Etiquetas.svelte +++ b/src/lib/components/Etiquetas.svelte @@ -28,13 +28,18 @@ * el píxel exacto. */ enlaces?: boolean; + /** + * Más pequeñas, para cuando van dentro de una fila de una lista y no en + * una ficha: ahí son un dato de apoyo y no deben pesar más que el título. + */ + menudas?: boolean; } - let { etiquetas, titulo = 'Etiquetas', enlaces = true }: Props = $props(); + let { etiquetas, titulo = 'Etiquetas', enlaces = true, menudas = false }: Props = $props(); {#if etiquetas.length > 0} -