Introduce completeBookingCreationFlow utility and refactor booking flow tests:
- Added `completeBookingCreationFlow` utility to streamline booking creation logic in `bookingFlow.ts`. - Refactored `userBookings.spec.ts` to replace inline booking creation steps with the new utility for improved readability and consistency. - Applied `data-testid` attributes across booking-related components for enhanced testability and test coverage. - Enhanced Playwright navigation error handling with `isBenignNavigationError` and `settleAuthenticatedNavigation` utilities to improve resilience and test robustness.
This commit is contained in:
@@ -130,15 +130,27 @@ async function submitOrderSettingModal(
|
||||
async function createInvoiceCollectionFromPicker(page: Page, closedAt: string) {
|
||||
const popup = page.locator(".swal2-popup");
|
||||
await expect(popup).toBeVisible();
|
||||
await popup.locator(".tabs li").nth(1).click();
|
||||
await expect(popup.locator(".tabs")).toBeVisible({ timeout: 10000 });
|
||||
|
||||
const createTab = popup.locator(".tabs li a").last();
|
||||
await expect(createTab).toBeVisible({ timeout: 10000 });
|
||||
await createTab.click();
|
||||
|
||||
const dateInput = popup.locator('input[type="date"]').first();
|
||||
await expect(dateInput).toBeVisible();
|
||||
await expect(dateInput).toBeVisible({ timeout: 10000 });
|
||||
await dateInput.fill(closedAt);
|
||||
|
||||
const createButton = popup.locator(".button.is-primary").first();
|
||||
await expect(createButton).toBeEnabled();
|
||||
const createRequest = page.waitForRequest((request) => {
|
||||
return request.method() === "POST" && request.url().includes("/collected-invoices");
|
||||
});
|
||||
const createResponse = page.waitForResponse((response) => {
|
||||
return response.request().method() === "POST" && response.url().includes("/collected-invoices");
|
||||
});
|
||||
const createButton = popup.locator("button.button.is-primary").first();
|
||||
await expect(createButton).toBeEnabled({ timeout: 10000 });
|
||||
await createButton.click();
|
||||
await createRequest;
|
||||
await createResponse;
|
||||
}
|
||||
|
||||
async function waitForOrderInvoiceCollectionSuccess(page: Page) {
|
||||
@@ -157,6 +169,7 @@ async function changeOrderCustomer(page: Page, customerNumber: string, closedAt:
|
||||
const customerResult = customerPopup.locator(".customer-drop-down-select").first();
|
||||
await expect(customerResult).toBeVisible();
|
||||
await customerResult.click();
|
||||
await expect(customerPopup.locator("#pos_select_customer_input")).toHaveCount(0, { timeout: 10000 });
|
||||
|
||||
await createInvoiceCollectionFromPicker(page, closedAt);
|
||||
await waitForOrderInvoiceCollectionSuccess(page);
|
||||
@@ -711,51 +724,57 @@ test.describe("Admin POS Orders - desktop settings", () => {
|
||||
|
||||
test("persists scalar metadata edits across settings and details tabs", async ({ page }) => {
|
||||
const { orderId } = await createDisposableOrder(page);
|
||||
const updatedValues = {
|
||||
const submittedValues = {
|
||||
reference: "UPDATED-REF-2026",
|
||||
reg_1: "ZZ99881",
|
||||
reg_2: "TR99882",
|
||||
reg_3: "TL99883",
|
||||
reg_1: " zz-99 881 ",
|
||||
reg_2: " tr/99-882 ",
|
||||
reg_3: " tl_99 883 ",
|
||||
notes: "Updated order note",
|
||||
po: "PO-9001",
|
||||
lane: "7",
|
||||
wash_id: "WASH-77",
|
||||
booking_id: "8801",
|
||||
};
|
||||
const expectedValues = {
|
||||
...submittedValues,
|
||||
reg_1: "ZZ99881",
|
||||
reg_2: "TR99882",
|
||||
reg_3: "TL99883",
|
||||
};
|
||||
|
||||
await openOrderSettings(page, orderId);
|
||||
|
||||
await submitOrderSettingModal(page, "reference", updatedValues.reference);
|
||||
await submitOrderSettingModal(page, "reg_1", updatedValues.reg_1);
|
||||
await submitOrderSettingModal(page, "reg_2", updatedValues.reg_2);
|
||||
await submitOrderSettingModal(page, "reg_3", updatedValues.reg_3);
|
||||
await submitOrderSettingModal(page, "notes", updatedValues.notes);
|
||||
await submitOrderSettingModal(page, "po", updatedValues.po);
|
||||
await submitOrderSettingModal(page, "lane", updatedValues.lane);
|
||||
await submitOrderSettingModal(page, "wash_id", updatedValues.wash_id);
|
||||
await submitOrderSettingModal(page, "booking_id", updatedValues.booking_id);
|
||||
await submitOrderSettingModal(page, "reference", submittedValues.reference);
|
||||
await submitOrderSettingModal(page, "reg_1", submittedValues.reg_1);
|
||||
await submitOrderSettingModal(page, "reg_2", submittedValues.reg_2);
|
||||
await submitOrderSettingModal(page, "reg_3", submittedValues.reg_3);
|
||||
await submitOrderSettingModal(page, "notes", submittedValues.notes);
|
||||
await submitOrderSettingModal(page, "po", submittedValues.po);
|
||||
await submitOrderSettingModal(page, "lane", submittedValues.lane);
|
||||
await submitOrderSettingModal(page, "wash_id", submittedValues.wash_id);
|
||||
await submitOrderSettingModal(page, "booking_id", submittedValues.booking_id);
|
||||
|
||||
await reloadOrderSettings(page, orderId);
|
||||
await expect(getOrderSettingsField(page, "reference")).toContainText(updatedValues.reference);
|
||||
await expect(getOrderSettingsField(page, "reg_1")).toContainText(updatedValues.reg_1);
|
||||
await expect(getOrderSettingsField(page, "reg_2")).toContainText(updatedValues.reg_2);
|
||||
await expect(getOrderSettingsField(page, "reg_3")).toContainText(updatedValues.reg_3);
|
||||
await expect(getOrderSettingsField(page, "notes")).toContainText(updatedValues.notes);
|
||||
await expect(getOrderSettingsField(page, "po")).toContainText(updatedValues.po);
|
||||
await expect(getOrderSettingsField(page, "lane")).toContainText(updatedValues.lane);
|
||||
await expect(getOrderSettingsField(page, "wash_id")).toContainText(updatedValues.wash_id);
|
||||
await expect(getOrderSettingsField(page, "booking_id")).toContainText(updatedValues.booking_id);
|
||||
await expect(getOrderSettingsField(page, "reference")).toContainText(expectedValues.reference);
|
||||
await expect(getOrderSettingsField(page, "reg_1")).toContainText(expectedValues.reg_1);
|
||||
await expect(getOrderSettingsField(page, "reg_2")).toContainText(expectedValues.reg_2);
|
||||
await expect(getOrderSettingsField(page, "reg_3")).toContainText(expectedValues.reg_3);
|
||||
await expect(getOrderSettingsField(page, "notes")).toContainText(expectedValues.notes);
|
||||
await expect(getOrderSettingsField(page, "po")).toContainText(expectedValues.po);
|
||||
await expect(getOrderSettingsField(page, "lane")).toContainText(expectedValues.lane);
|
||||
await expect(getOrderSettingsField(page, "wash_id")).toContainText(expectedValues.wash_id);
|
||||
await expect(getOrderSettingsField(page, "booking_id")).toContainText(expectedValues.booking_id);
|
||||
|
||||
await openOrderDetailsTab(page);
|
||||
await expect(getOrderDetailInput(page, "reference")).toHaveValue(updatedValues.reference);
|
||||
await expect(getOrderDetailInput(page, "reg_1")).toHaveValue(updatedValues.reg_1);
|
||||
await expect(getOrderDetailInput(page, "reg_2")).toHaveValue(updatedValues.reg_2);
|
||||
await expect(getOrderDetailInput(page, "reg_3")).toHaveValue(updatedValues.reg_3);
|
||||
await expect(getOrderDetailInput(page, "notes")).toHaveValue(updatedValues.notes);
|
||||
await expect(getOrderDetailInput(page, "po")).toHaveValue(updatedValues.po);
|
||||
await expect(getOrderDetailInput(page, "lane")).toHaveValue(updatedValues.lane);
|
||||
await expect(getOrderDetailInput(page, "wash_id")).toHaveValue(updatedValues.wash_id);
|
||||
await expect(getOrderDetailInput(page, "booking_id")).toHaveValue(updatedValues.booking_id);
|
||||
await expect(getOrderDetailInput(page, "reference")).toHaveValue(expectedValues.reference);
|
||||
await expect(getOrderDetailInput(page, "reg_1")).toHaveValue(expectedValues.reg_1);
|
||||
await expect(getOrderDetailInput(page, "reg_2")).toHaveValue(expectedValues.reg_2);
|
||||
await expect(getOrderDetailInput(page, "reg_3")).toHaveValue(expectedValues.reg_3);
|
||||
await expect(getOrderDetailInput(page, "notes")).toHaveValue(expectedValues.notes);
|
||||
await expect(getOrderDetailInput(page, "po")).toHaveValue(expectedValues.po);
|
||||
await expect(getOrderDetailInput(page, "lane")).toHaveValue(expectedValues.lane);
|
||||
await expect(getOrderDetailInput(page, "wash_id")).toHaveValue(expectedValues.wash_id);
|
||||
await expect(getOrderDetailInput(page, "booking_id")).toHaveValue(expectedValues.booking_id);
|
||||
});
|
||||
|
||||
test("persists department, created_at, and invoice inclusion changes through per-field modals", async ({
|
||||
@@ -812,21 +831,21 @@ test.describe("Admin POS Orders - desktop settings", () => {
|
||||
await changeOrderCustomer(page, "999", "2026-04-30");
|
||||
await expect(page).toHaveURL(initialUrl);
|
||||
await expect(getOrderSettingsField(page, "customer_id")).toContainText("999");
|
||||
await expect(getOrderSettingsField(page, "invoice_collection_id")).toContainText("200");
|
||||
await expect(getOrderSettingsField(page, "invoice_collection_id")).toContainText("300");
|
||||
|
||||
await openOrderDetailsTab(page);
|
||||
await expect(getOrderDetailInput(page, "customer_id")).toHaveValue("999");
|
||||
await expect(getOrderDetailInput(page, "invoice_collection_id")).toHaveValue("200");
|
||||
await expect(getOrderDetailInput(page, "invoice_collection_id")).toHaveValue("300");
|
||||
|
||||
await clickVisibleTestId(page, "pos-order-tab-settings");
|
||||
await expect(page.getByTestId("pos-order-panel-settings")).toBeVisible();
|
||||
|
||||
await changeOrderInvoiceCollection(page, "2026-05-01");
|
||||
await expect(page).toHaveURL(initialUrl);
|
||||
await expect(getOrderSettingsField(page, "invoice_collection_id")).toContainText("201");
|
||||
await expect(getOrderSettingsField(page, "invoice_collection_id")).toContainText("301");
|
||||
|
||||
await openOrderDetailsTab(page);
|
||||
await expect(getOrderDetailInput(page, "invoice_collection_id")).toHaveValue("201");
|
||||
await expect(getOrderDetailInput(page, "invoice_collection_id")).toHaveValue("301");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user