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.
41 lines
1.5 KiB
41 lines
1.5 KiB
|
4 weeks ago
|
import { expect, test } from '@playwright/test';
|
||
|
|
|
||
|
|
/*
|
||
|
|
* El panel, desde fuera.
|
||
|
|
*
|
||
|
|
* Aquí solo se comprueba la puerta: que sin sesión no se ve nada y que la
|
||
|
|
* dirección de vuelta se conserva. Quién puede pasar una vez dentro lo deciden
|
||
|
|
* `esAdmin` y `exigirAdmin`, y eso se prueba en `administracion.spec.ts`, donde
|
||
|
|
* se pueden montar las tres situaciones sin necesitar un buzón de correo.
|
||
|
|
*/
|
||
|
|
test.describe('El panel', () => {
|
||
|
|
test('sin sesión no se ve, se manda a entrar', async ({ page }) => {
|
||
|
|
await page.goto('/admin');
|
||
|
|
|
||
|
|
await expect(page).toHaveURL(/\/entrar/);
|
||
|
|
await expect(page.getByRole('heading', { level: 1 })).toBeVisible();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('y se vuelve a donde se iba, no a la portada', async ({ page }) => {
|
||
|
|
await page.goto('/admin?ver=pendientes');
|
||
|
|
|
||
|
|
const url = new URL(page.url());
|
||
|
|
expect(url.pathname).toBe('/entrar');
|
||
|
|
expect(url.searchParams.get('volverA')).toBe('/admin?ver=pendientes');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('el panel no es contenido del sitio, y robots lo dice', async ({ request }) => {
|
||
|
|
const robots = await request.get('/robots.txt');
|
||
|
|
expect(await robots.text()).toContain('Disallow: /admin');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('no hay ningún enlace al panel en la web pública', async ({ page }) => {
|
||
|
|
// No es seguridad —la guarda es el servidor—, es que el panel no forma
|
||
|
|
// parte de la navegación de nadie que venga a leer o a comprar.
|
||
|
|
for (const ruta of ['/', '/musica', '/generos', '/blog']) {
|
||
|
|
await page.goto(ruta);
|
||
|
|
await expect(page.locator('a[href^="/admin"]')).toHaveCount(0);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|