feat(assignments): remaining quantity display and partial return i18n
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
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")
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user