import { expect, type Page, test } from "@playwright/test" async function setLocaleCookie( page: Page, locale: "en" | "es", baseURL?: string, ) { await page.context().addCookies([ { name: "stock-manager-locale", value: locale, url: baseURL ?? "http://127.0.0.1:3100", }, ]) } async function signInAsAdmin(page: Page, baseURL?: string) { await setLocaleCookie(page, "en", baseURL) await page.goto("/login") await page.getByLabel("Email").fill("admin@example.test") await page.getByLabel("Password").fill("admin-password") await page.getByRole("button", { name: "Sign In" }).click() await expect(page).toHaveURL("/") } async function createPerson(page: Page, name: string, email: string) { await page.goto("/people/new") await page.getByLabel("Nombre").fill(name) await page.getByLabel("Apellido").fill("E2E") await page.getByLabel("Departamento").selectOption("OTHER") await page.getByLabel("Correo electrónico").fill(email) await page.getByLabel("Teléfono").fill("123456789") await page.getByLabel("Rol").selectOption("NO_USER") await page.getByRole("button", { name: "Crear usuario" }).click() await expect(page.getByText("Usuario creado correctamente")).toBeVisible() } async function createCategory(page: Page, name: string) { await page.goto("/inventory/categories/new") await page.locator("input#name").fill(name) await page.getByRole("button", { name: "Crear categoría" }).click() await expect(page.getByText("Categoría creada correctamente")).toBeVisible() } async function createItem(page: Page, name: string, categoryName: string) { await page.goto("/inventory/items/new") await page.getByLabel("Nombre").fill(name) await page.getByLabel("Categoría").selectOption({ label: categoryName }) await page.getByLabel("Stock").click() await page.getByLabel("Stock").fill("10") await page.getByRole("button", { name: "Crear artículo" }).click() await expect(page.getByText("Artículo creado correctamente")).toBeVisible() } async function createAssignment( page: Page, personFullName: string, itemName: string, quantity: string, ) { await page.goto("/assignments/new") await page.getByLabel("Persona").selectOption({ label: personFullName }) await page.getByLabel("Artículo").selectOption({ label: itemName }) await page.getByLabel("Cantidad").fill(quantity) await page.getByRole("button", { name: "Crear asignación" }).click() await expect(page.getByText("Asignación creada correctamente")).toBeVisible() } test.describe("assignment partial return", () => { test("creates an assignment and submits a partial return", async ({ baseURL, page, }) => { const timestamp = Date.now() const personName = `E2E Person ${timestamp}` const itemName = `E2E Item ${timestamp}` const categoryName = `E2E Category ${timestamp}` await signInAsAdmin(page, baseURL) await setLocaleCookie(page, "es", baseURL) await createCategory(page, categoryName) await createPerson(page, personName, `e2e-${timestamp}@example.test`) await createItem(page, itemName, categoryName) await createAssignment(page, `${personName} E2E`, itemName, "5") await page.goto("/assignments") const row = page.getByRole("row", { name: new RegExp(personName) }) await expect(row).toContainText("5") const returnButton = row.getByRole("button", { name: "Devolver asignación", }) await returnButton.click() const dialog = page.getByRole("dialog") await expect(dialog).toBeVisible() await expect( dialog.getByRole("heading", { name: "Devolver artículo" }), ).toBeVisible() await dialog.getByRole("spinbutton", { name: "Cantidad" }).fill("2") await dialog.getByRole("button", { name: "Devolver" }).click() await expect(dialog).not.toBeVisible() await expect(row).toContainText("Restantes: 3 de 5") }) })