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/e2e/contacto.e2e.ts

67 lines
2.9 KiB

import { expect, test } from '@playwright/test';
/** Rellena el formulario con datos válidos, salvo lo que se sobrescriba. */
async function rellenar(
page: import('@playwright/test').Page,
campos: Partial<{ nombre: string; email: string; motivo: string; mensaje: string }> = {}
) {
await page.getByLabel('Nombre').fill(campos.nombre ?? 'Ana Ruiz');
await page.getByLabel('Correo electrónico').fill(campos.email ?? 'ana@example.com');
await page.getByLabel('Motivo').selectOption(campos.motivo ?? 'colaboracion');
await page
.getByLabel('Mensaje')
.fill(campos.mensaje ?? 'Me gustaría hablar contigo sobre una colaboración para un disco.');
}
test.describe('Formulario de contacto', () => {
test('la validación del servidor devuelve los errores por campo', async ({ page }) => {
await page.goto('/contacto');
// "A" y "Hola" pasan la validación del navegador y fallan en el servidor,
// que es justo lo que interesa comprobar aquí.
await rellenar(page, { nombre: 'A', mensaje: 'Hola' });
await page.getByRole('button', { name: 'Enviar mensaje' }).click();
await expect(page.getByText('Indica tu nombre.')).toBeVisible();
await expect(page.getByText(/Cuenta un poco más/)).toBeVisible();
});
test('lo escrito no se pierde cuando la validación falla', async ({ page }) => {
await page.goto('/contacto');
await rellenar(page, { nombre: 'A' });
await page.getByRole('button', { name: 'Enviar mensaje' }).click();
await expect(page.getByText('Indica tu nombre.')).toBeVisible();
await expect(page.getByLabel('Correo electrónico')).toHaveValue('ana@example.com');
await expect(page.getByLabel('Motivo')).toHaveValue('colaboracion');
await expect(page.getByLabel('Mensaje')).not.toBeEmpty();
});
test('el campo trampa descarta los envíos automáticos', async ({ page }) => {
await page.goto('/contacto');
await rellenar(page);
// Solo un cliente automático rellena este campo: está fuera de la vista
// y fuera del recorrido de tabulación.
await page.evaluate(() => {
const trampa = document.querySelector('#companiaWeb');
if (trampa instanceof HTMLInputElement) trampa.value = 'https://spam.example';
});
await page.getByRole('button', { name: 'Enviar mensaje' }).click();
await expect(page.getByText('No se ha podido enviar el mensaje.')).toBeVisible();
});
test('un envío válido no muestra errores de campo', async ({ page }) => {
await page.goto('/contacto');
await rellenar(page);
await page.getByRole('button', { name: 'Enviar mensaje' }).click();
// El resultado final depende de si hay proveedor de correo configurado
// (ver src/lib/server/correo.ts), así que solo se comprueba que la
// validación ha quedado atrás.
await expect(page.getByText('Indica tu nombre.')).toHaveCount(0);
await expect(page.getByText(/Cuenta un poco más/)).toHaveCount(0);
await expect(page.getByText('Ese correo no parece válido.')).toHaveCount(0);
});
});

Powered by TurnKey Linux.