FactuGES_ERP/tests/e2e/customer-invoices/proformas/proforma-customer.spec.ts
David ba257fd489 Add end-to-end tests for proforma customer selection and persistence
- Implement tests to verify that the selected customer is retained when creating a proforma.
- Add functionality to change the customer and ensure the change is persisted.
- Include tests to confirm the customer change and refresh the recipient name.
- Test cancellation of customer change to ensure the previous customer remains selected.
2026-09-15 11:37:50 +02:00

105 lines
4.3 KiB
TypeScript

import { randomUUID } from "node:crypto";
import type { Page } from "@playwright/test";
import { expect, test } from "@playwright/test";
import { createCustomerViaUi } from "../../customers/support/create-customer-via-ui";
import { loginViaUi } from "../../support/login-via-ui";
import { createProformaViaUi } from "./support/create-proforma-via-ui";
const selectCandidate = async (page: Page, customer: { id: string; search: string }) => {
await page.locator("#proforma-change-customer").click();
const responsePromise = page.waitForResponse((response) => {
const url = new URL(response.url());
return (
response.request().method() === "GET" &&
/\/customers\/?$/.test(url.pathname) &&
url.searchParams.get("q") === customer.search
);
});
await page.getByRole("dialog").locator('input[inputmode="search"]').fill(customer.search);
const response = await responsePromise;
expect(response.status()).toBe(200);
await page.getByTestId(`customer-selection-${customer.id}`).click();
await page.locator("#customer-selection-confirm").click();
};
const confirmCandidate = async (page: Page) => {
await expect(page.locator("#proforma-customer-change-confirm")).toBeVisible();
await page.locator("#proforma-customer-change-confirm").click();
};
const save = async (page: Page, id: string) => {
const response = page.waitForResponse(
(value) =>
value.request().method() === "PUT" &&
new URL(value.url()).pathname.endsWith(`/proformas/${id}`)
);
await page.getByTestId("proforma-update-submit").click();
const result = await response;
expect(result.status()).toBe(200);
};
const returnToProforma = async (page: Page, id: string) => {
await page.goto(`/proformas/${id}/edit?returnTo=/proformas`);
await expect(page.locator("#proforma-change-customer")).toBeVisible();
};
test("CUSTOMER-INVOICES-PROFORMA-CUSTOMER-001: conserva el cliente seleccionado al crear", async ({
page,
}, testInfo) => {
await loginViaUi(page);
const proforma = await createProformaViaUi(page, testInfo);
await page.reload();
await expect(page.locator("#proforma-recipient-name")).toHaveText(proforma.customer.name);
});
test("CUSTOMER-INVOICES-PROFORMA-CUSTOMER-002: cambia de cliente y lo persiste", async ({
page,
}, testInfo) => {
await loginViaUi(page);
const proforma = await createProformaViaUi(page, testInfo);
const search = randomUUID().replaceAll("-", "");
const customer = await createCustomerViaUi(page, testInfo, `E2E Customer B ${search}`);
await returnToProforma(page, proforma.id);
await selectCandidate(page, { id: customer.id, search });
await confirmCandidate(page);
await expect(page.locator("#proforma-recipient-name")).toHaveText(customer.name);
await save(page, proforma.id);
await page.reload();
await expect(page.locator("#proforma-recipient-name")).toHaveText(customer.name);
});
test("CUSTOMER-INVOICES-PROFORMA-CUSTOMER-003: confirma el cambio y refresca el recipient", async ({
page,
}, testInfo) => {
await loginViaUi(page);
const proforma = await createProformaViaUi(page, testInfo);
const search = randomUUID().replaceAll("-", "");
const customer = await createCustomerViaUi(page, testInfo, `E2E Customer Derived ${search}`);
await returnToProforma(page, proforma.id);
await selectCandidate(page, { id: customer.id, search });
await confirmCandidate(page);
await expect(page.locator("#proforma-recipient-name")).toHaveText(customer.name);
await save(page, proforma.id);
await page.reload();
await expect(page.locator("#proforma-recipient-name")).toHaveText(customer.name);
});
test("CUSTOMER-INVOICES-PROFORMA-CUSTOMER-004: cancelar conserva el cliente anterior", async ({
page,
}, testInfo) => {
await loginViaUi(page);
const proforma = await createProformaViaUi(page, testInfo);
const search = randomUUID().replaceAll("-", "");
const customer = await createCustomerViaUi(page, testInfo, `E2E Customer Cancel ${search}`);
await returnToProforma(page, proforma.id);
await selectCandidate(page, { id: customer.id, search });
await expect(page.locator("#proforma-customer-change-cancel")).toBeVisible();
await page.locator("#proforma-customer-change-cancel").click();
await expect(page.locator("#proforma-recipient-name")).toHaveText(proforma.customer.name);
await page.reload();
await expect(page.locator("#proforma-recipient-name")).toHaveText(proforma.customer.name);
});