todos-contra-el-fuego-web/e2e/tests/auth.spec.js
vjrj a3f2929ff7 test(e2e): browser suite for the flows the server tests cannot see
Playwright under e2e/, its own npm project so Meteor never sees the dependency
(.meteorignore keeps the directory out of the bundle — a config file at the app
root is otherwise eagerly loaded into the server and crashes it).

Covers what the phase asked for: sign up / log in, creating a zone from the map
and watching the union get painted on /subscriptions and /zones, removing it
again, commenting on a fire, and switching language. The zone spec is the flow
that froze staging on 2026-07-30 — it passes only if the server is still
answering DDP while the union is recomputed.

docker-compose.e2e.yml is a throwaway stack (Mongo on tmpfs, no named volume) so
the destructive seeds cannot be pointed at anything real by accident;
playwright.config.js refuses to start against the staging or production domains.

i18n.spec.js leaves a test.fixme on a real bug found while writing it: the
language chosen in the profile does not survive a page reload.
2026-08-01 18:44:09 +02:00

44 lines
1.6 KiB
JavaScript

import { test, expect } from '@playwright/test';
import { signUp, logIn, newEmail } from '../support/app.js';
test.describe('registro y acceso', () => {
test('a new account can sign up, log out and log back in', async ({ page }) => {
const email = newEmail();
await signUp(page, email);
// Signed in: the navbar swaps the login links for the profile and logout ones.
await expect(page.locator('#logout')).toBeVisible();
await expect(page.locator('#profile')).toContainText('E2E Tester');
await page.click('#logout');
await expect(page.locator('#login')).toBeVisible();
await logIn(page, email);
await expect(page.locator('#logout')).toBeVisible();
});
test('signing up is refused without accepting the terms', async ({ page }) => {
await page.goto('/signup');
await page.fill('input[name=firstName]', 'E2E');
await page.fill('input[name=lastName]', 'Tester');
await page.fill('input[name=emailAddress]', newEmail());
await page.fill('input[name=password]', 'password');
await expect(page.locator('#signUpSubmit')).toBeDisabled();
});
test('a wrong password does not sign anybody in', async ({ page }) => {
const email = newEmail();
await signUp(page, email);
await page.click('#logout');
await logIn(page, email, 'not-the-password');
await expect(page.locator('#loginSubmit')).toBeVisible();
await expect(page.locator('#logout')).toHaveCount(0);
});
test('the private zones page sends anonymous visitors to the login', async ({ page }) => {
await page.goto('/subscriptions');
await expect(page.locator('#loginSubmit')).toBeVisible();
});
});