Files

93 lines
3.8 KiB
TypeScript
Raw Permalink Normal View History

import { test, expect, type Page, type Locator } from "@playwright/test";
async function createBoard(page: Page, title: string) {
await page.goto("/");
await page.getByTestId("board-title").fill(title);
await page.getByTestId("template").selectOption("mad-sad-glad");
await page.getByTestId("create").click();
await page.waitForURL(/\/b\/.+/);
return page.url();
}
async function joinAs(page: Page, url: string, name: string) {
await page.goto(url);
await page.getByTestId("name").fill(name);
await page.getByTestId("join").click();
await expect(page.getByTestId("column").first()).toBeVisible();
}
async function addPublicNote(col: Locator, text: string) {
await col.getByTestId("note-input").fill(text);
await col.getByTestId("note-input").press("Enter");
await expect(col.getByTestId("private-note")).toHaveCount(1);
await col.getByTestId("private-note").getByTestId("publish").click();
await expect(col.getByTestId("private-note")).toHaveCount(0);
}
test("participantes: presencia, editar nombre y mostrar autores", async ({ page }) => {
const url = await createBoard(page, "Retro panel");
await joinAs(page, url, "Ana");
const col = page.getByTestId("column").first();
await addPublicNote(col, "hola");
await expect(col.locator(".note .author")).toHaveText("Ana");
await page.getByTestId("open-participants").click();
const people = page.locator(".people");
await expect(people).toContainText("Ana");
// editar mi nombre
await page.getByTestId("edit-name").click();
await page.getByTestId("name-input").fill("Anita");
await page.getByTestId("name-save").click();
await expect(people).toContainText("Anita");
// ocultar autores de las tarjetas (checkbox controlado por el servidor -> click)
await page.getByTestId("show-creators").click();
await page.mouse.click(20, 400); // cerrar el drawer pulsando en el backdrop
await expect(col.locator(".note .author")).toHaveCount(0);
});
test("action points: añadir y mover a Done", async ({ page }) => {
const url = await createBoard(page, "Retro acciones");
await joinAs(page, url, "Ana");
await page.getByTestId("open-actions").click();
await page.getByTestId("action-input").fill("documentar el deploy");
await page.getByTestId("action-add").click();
await expect(page.getByTestId("todo-list").getByTestId("action-row")).toHaveCount(1);
// marcar como hecho -> la fila se mueve a Done (la casilla se desmonta del To-do)
await page.getByTestId("todo-list").getByTestId("action-done").first().click();
await expect(page.getByTestId("todo-list").getByTestId("action-row")).toHaveCount(0);
await expect(page.getByTestId("done-list").getByTestId("action-row")).toHaveCount(1);
});
test("export modal: previsualización con opciones", async ({ page }) => {
const url = await createBoard(page, "Retro export");
await joinAs(page, url, "Ana");
const col = page.getByTestId("column").first();
await addPublicNote(col, "algo");
await page.getByTestId("settings").click();
await page.getByTestId("open-export").click();
const preview = page.getByTestId("export-preview");
await expect(preview).toContainText("Retro export");
await expect(preview).toContainText("algo");
// desactivar autores -> desaparece el nombre del preview
await expect(preview).toContainText("_Ana_");
await page.getByTestId("opt-authors").uncheck();
await expect(preview).not.toContainText("_Ana_");
});
test("opciones: bloquear deja el board en solo lectura", async ({ page }) => {
const url = await createBoard(page, "Retro lock");
await joinAs(page, url, "Ana");
await page.getByTestId("settings").click();
await page.getByTestId("opt-lock").click();
await page.mouse.click(20, 400); // cerrar el panel
await expect(page.locator(".locked-banner")).toBeVisible();
await expect(page.getByTestId("private-section")).toHaveCount(0); // sin sección privada al bloquear
});