From a1ce9daa4f72e9d4e90c4ed55f017ea2e6d9f5c5 Mon Sep 17 00:00:00 2001 From: Katarzyna Date: Wed, 15 Jul 2026 10:22:15 +0200 Subject: [PATCH 1/3] add elements to send page --- src/pages/inbound/create/steps/SendStep.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/pages/inbound/create/steps/SendStep.ts b/src/pages/inbound/create/steps/SendStep.ts index 7d0c828f..d6bac5ca 100644 --- a/src/pages/inbound/create/steps/SendStep.ts +++ b/src/pages/inbound/create/steps/SendStep.ts @@ -79,6 +79,14 @@ class SendStep extends BasePageModel { await expect(this.driverNameField.textbox).toBeVisible(); await expect(this.commentField.textbox).toBeVisible(); } + + getShipmentStatus(status: string) { + return this.page.locator('.shipment-status').getByText(status); + } + + get rollbackButton() { + return this.page.getByRole('button', { name: 'Rollback' }); + } } export default SendStep; From 396b1ac1e9bd9e8a41c2959e5a3fa774bec338fa Mon Sep 17 00:00:00 2001 From: Katarzyna Date: Wed, 15 Jul 2026 10:22:47 +0200 Subject: [PATCH 2/3] add test for adding lines using buttons and rollback from send page --- .../addLinesUsingButtons.test.ts | 186 ++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 src/tests/inbound/createInbound/addLinesUsingButtons.test.ts diff --git a/src/tests/inbound/createInbound/addLinesUsingButtons.test.ts b/src/tests/inbound/createInbound/addLinesUsingButtons.test.ts new file mode 100644 index 00000000..0a528086 --- /dev/null +++ b/src/tests/inbound/createInbound/addLinesUsingButtons.test.ts @@ -0,0 +1,186 @@ +import { expect, test } from '@/fixtures/fixtures'; +import { Product } from '@/generated/ProductCodes.generated'; +import { AddItemsTableRow, LocationResponse, User } from '@/types'; +import { getDateByOffset, getToday } from '@/utils/DateUtils'; + +test.describe('Add lines using buttons and rollback from send page test', () => { + const TODAY = getToday(); + let ROWS: AddItemsTableRow[]; + let INBOUND_ID: string; + const DESCRIPTION = 'some description'; + let ORIGIN: LocationResponse; + let USER: User; + const EXPECTED_DELIVERY_DATE = getDateByOffset(TODAY, 1); + const SHIPMENT_TYPE = 'Land'; + + test.beforeEach( + async ({ productService, mainUserService, supplierLocationService }) => { + const PRODUCT_ONE = await productService.getProduct(Product.ONE); + const PRODUCT_TWO = await productService.getProduct(Product.TWO); + const PRODUCT_THREE = await productService.getProduct(Product.THREE); + USER = await mainUserService.getUser(); + ORIGIN = await supplierLocationService.getLocation(); + + ROWS = [ + { + productCode: PRODUCT_ONE.productCode, + productName: PRODUCT_ONE.name, + quantity: '10', + lotNumber: 'E2E-lot-test', + recipient: USER.name, + expirationDate: getDateByOffset(new Date(), 3), + packLevel1: '', + packLevel2: '', + }, + { + productCode: PRODUCT_TWO.productCode, + productName: PRODUCT_TWO.name, + quantity: '12', + lotNumber: '', + recipient: USER.name, + expirationDate: getDateByOffset(new Date(), 3), + packLevel1: '', + packLevel2: '', + }, + + { + productCode: PRODUCT_THREE.productCode, + productName: PRODUCT_THREE.name, + quantity: '15', + lotNumber: '', + recipient: USER.name, + expirationDate: getDateByOffset(new Date(), 3), + packLevel1: '', + packLevel2: '', + }, + ]; + } + ); + + test.afterEach(async ({ stockMovementService, stockMovementShowPage }) => { + await stockMovementShowPage.isLoaded(); + await stockMovementService.deleteStockMovement(INBOUND_ID); + }); + + test('Add lines using buttons and rollback from send page test', async ({ + createInboundPage, + stockMovementShowPage, + page, + }) => { + await test.step('Go to create inbound page', async () => { + await createInboundPage.goToPage(); + await createInboundPage.createStep.isLoaded(); + await createInboundPage.wizzardSteps.assertActiveStep('Create'); + }); + + await test.step('Create Stock Movement step', async () => { + await createInboundPage.createStep.originSelect.findAndSelectOption( + ORIGIN.name + ); + await createInboundPage.createStep.requestedBySelect.findAndSelectOption( + USER.name + ); + await createInboundPage.createStep.dateRequestedDatePicker.fill(TODAY); + await createInboundPage.createStep.descriptionField.textbox.fill( + DESCRIPTION + ); + }); + + await test.step('Go next step (Add items)', async () => { + await createInboundPage.nextButton.click(); + await createInboundPage.addItemsStep.isLoaded(); + }); + + INBOUND_ID = createInboundPage.getId(); + + await test.step('Add first line items (Add items)', async () => { + const data = ROWS[0]; + const row = createInboundPage.addItemsStep.table.row(0); + await row.productSelect.findAndSelectOption(data.productName); + await row.quantityField.numberbox.fill(data.quantity); + await row.lotField.textbox.fill(data.lotNumber); + await row.recipientSelect.findAndSelectOption(data.recipient); + + expect(await createInboundPage.addItemsStep.table.rows.count()).toBe(1); + }); + + await test.step('Add second line item using tab', async () => { + await page.keyboard.press('Tab'); + expect(await createInboundPage.addItemsStep.table.rows.count()).toBe(2); + + const data = ROWS[1]; + const row = createInboundPage.addItemsStep.table.row(1); + await row.productSelect.findAndSelectOption(data.productName); + await row.quantityField.numberbox.fill(data.quantity); + await row.lotField.textbox.fill(data.lotNumber); + await row.recipientSelect.findAndSelectOption(data.recipient); + }); + + await test.step('Add third line item using right arrow', async () => { + await page.keyboard.press('ArrowRight'); + expect(await createInboundPage.addItemsStep.table.rows.count()).toBe(3); + + const data = ROWS[2]; + const row = createInboundPage.addItemsStep.table.row(2); + await row.productSelect.findAndSelectOption(data.productName); + await row.quantityField.numberbox.fill(data.quantity); + await row.lotField.textbox.fill(data.lotNumber); + await row.recipientSelect.findAndSelectOption(data.recipient); + }); + + await test.step('Go to next step (Send)', async () => { + await createInboundPage.nextButton.click(); + await createInboundPage.wizzardSteps.assertActiveStep('Send'); + await createInboundPage.sendStep.isLoaded(); + }); + + await test.step('Fill shipment fields (Send)', async () => { + await createInboundPage.sendStep.shipmentTypeSelect.findAndSelectOption( + SHIPMENT_TYPE + ); + await createInboundPage.sendStep.expectedDeliveryDatePicker.fill( + EXPECTED_DELIVERY_DATE + ); + }); + + await test.step('Send shipment', async () => { + await createInboundPage.sendStep.sendShipmentButton.click(); + await stockMovementShowPage.waitForUrl(); + await stockMovementShowPage.isLoaded(); + }); + + await test.step('Open send page for shipped inbound and assert ship date fied is disabled', async () => { + await stockMovementShowPage.editButton.click(); + await createInboundPage.sendStep.isLoaded(); + await expect( + createInboundPage.sendStep.shipDateDatePicker.textbox + ).toBeDisabled(); + await expect( + createInboundPage.sendStep.sendShipmentButton + ).toBeDisabled(); + await expect( + createInboundPage.sendStep.getShipmentStatus('SHIPPED') + ).toBeVisible(); + await expect(createInboundPage.sendStep.rollbackButton).toBeEnabled(); + }); + + await test.step('Rollback shipment from send page', async () => { + await createInboundPage.sendStep.rollbackButton.click(); + await createInboundPage.sendStep.isLoaded(); + await expect( + createInboundPage.sendStep.shipDateDatePicker.textbox + ).toBeEnabled(); + await expect(createInboundPage.sendStep.sendShipmentButton).toBeEnabled(); + await expect( + createInboundPage.sendStep.getShipmentStatus('PENDING') + ).toBeVisible(); + await expect(createInboundPage.sendStep.rollbackButton).toBeHidden(); + }); + + await test.step('Save and exit from inbound and assert status on view page', async () => { + await createInboundPage.sendStep.saveAndExitButton.click(); + await stockMovementShowPage.isLoaded(); + await expect(stockMovementShowPage.statusTag).toHaveText('Checking'); + }); + }); +}); From fca9cd24e822dee0e8d75befdef80ac87244272a Mon Sep 17 00:00:00 2001 From: Katarzyna Date: Wed, 15 Jul 2026 11:50:45 +0200 Subject: [PATCH 3/3] improve flaky test --- src/pages/stockMovementShow/StockMovementShowPage.ts | 4 ++++ src/tests/receiving/editOriginalLineQtyTo0.test.ts | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/pages/stockMovementShow/StockMovementShowPage.ts b/src/pages/stockMovementShow/StockMovementShowPage.ts index 2b8a60b0..82b995b6 100644 --- a/src/pages/stockMovementShow/StockMovementShowPage.ts +++ b/src/pages/stockMovementShow/StockMovementShowPage.ts @@ -133,6 +133,10 @@ class StockMovementShowPage extends BasePageModel { await this.openTab(this.receiptTab, this.receiptListTable); } + async openPackingListTab() { + await this.openTab(this.packingListTab, this.packingListTable); + } + async openDocumentsTab() { await this.openTab(this.documentTab, this.documentsListTable); } diff --git a/src/tests/receiving/editOriginalLineQtyTo0.test.ts b/src/tests/receiving/editOriginalLineQtyTo0.test.ts index 7f78e7c9..64d598d0 100644 --- a/src/tests/receiving/editOriginalLineQtyTo0.test.ts +++ b/src/tests/receiving/editOriginalLineQtyTo0.test.ts @@ -193,7 +193,7 @@ test.describe('Edit qty of original line to 0', () => { }); await test.step('Assert received lines on Receipt tab', async () => { - await stockMovementShowPage.receiptTab.click(); + await stockMovementShowPage.openReceiptsTab(); await expect(stockMovementShowPage.receiptListTable.rows).toHaveCount(3); await expect( stockMovementShowPage.receiptListTable.row(1).serialLotNumber @@ -204,7 +204,7 @@ test.describe('Edit qty of original line to 0', () => { }); await test.step('Assert received lines on Packing list', async () => { - await stockMovementShowPage.packingListTab.click(); + await stockMovementShowPage.openPackingListTab(); await expect( stockMovementShowPage.packingListTable.row(1).lotNumber ).not.toHaveText(lot); @@ -358,7 +358,7 @@ test.describe('Edit original line to other product in the middle of receipt', () await test.step('Assert received product on stock movement show page', async () => { const PRODUCT_FOUR = await productService.getProduct(Product.FOUR); const PRODUCT_FIVE = await productService.getProduct(Product.FIVE); - await stockMovementShowPage.packingListTab.isVisible(); + await stockMovementShowPage.openPackingListTab(); await expect( stockMovementShowPage.packingListTable.row(1).product ).toHaveText(PRODUCT_FOUR.name);