From 150dd8fb8071dc9942318b6615a9ffb538fb1667 Mon Sep 17 00:00:00 2001 From: Katarzyna Date: Mon, 18 May 2026 13:46:12 +0200 Subject: [PATCH 1/3] add elements to putaway list page --- src/pages/putaway/list/PutawayListPage.ts | 58 ++++++++++++++++++---- src/pages/putaway/list/PutawayListTable.ts | 4 ++ 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/pages/putaway/list/PutawayListPage.ts b/src/pages/putaway/list/PutawayListPage.ts index 87630ff..5cf5b84 100644 --- a/src/pages/putaway/list/PutawayListPage.ts +++ b/src/pages/putaway/list/PutawayListPage.ts @@ -26,27 +26,63 @@ class PutawayListPage extends BasePageModel { } get filters() { - return this.page.getByTestId('filters') + return this.page.getByTestId('filters'); } get searchField() { - return this.filters - .getByTestId('search-input'); + return this.filters.getByTestId('search-input'); } get orderTypeFilter() { - return this.filters - .getByTestId('order-type-select'); + return this.filters.getByTestId('order-type-select'); } get statusFilter() { - return this.filters - .getByTestId('status.select'); + return this.filters.locator('#select2-status-container'); + } + + getStatus(status: string) { + return this.page + .locator('.select2-results__option', { + hasText: status, + }) + .click(); } get destinationFilter() { - return this.filters - .getByTestId('destination-select'); + return this.filters.getByTestId('destination-select'); + } + + get orderedByFilter() { + return this.filters.locator('#select2-orderedBy-container'); + } + + get orderedByTextInput() { + return this.page.locator('.select2-search__field'); + } + + getOrderedBy(user: string) { + return this.page + .locator('.select2-results__option', { + hasText: user, + }) + .click(); + } + + get createdByFilter() { + return this.filters.locator('#select2-createdBy-container'); + } + + get createdByTextInput() { + return this.page.locator('.select2-search__field'); + } + + getCreatedBy(user: string) { + return this.page + .locator('.select2-results__option', { + hasText: user, + }) + .click(); } get searchButton() { @@ -60,6 +96,10 @@ class PutawayListPage extends BasePageModel { get emptyPutawayList() { return this.page.getByTestId('empty-table'); } + + get nextButton() { + return this.page.getByRole('link').getByText('Next'); + } } export default PutawayListPage; diff --git a/src/pages/putaway/list/PutawayListTable.ts b/src/pages/putaway/list/PutawayListTable.ts index 2a7eee9..b21110e 100644 --- a/src/pages/putaway/list/PutawayListTable.ts +++ b/src/pages/putaway/list/PutawayListTable.ts @@ -52,5 +52,9 @@ class Row extends BasePageModel { get lineItems() { return this.row.getByTestId('line-items'); } + + get orderedBy() { + return this.row.getByTestId('ordered-by'); + } } export default PutawayListTable; From 17720293f77ad4a42155d0bfd0ff3c75d366c502 Mon Sep 17 00:00:00 2001 From: Katarzyna Date: Mon, 18 May 2026 13:47:15 +0200 Subject: [PATCH 2/3] add auditing table to putaway details page --- .../putawayDetails/PutawayDetailsPage.ts | 3 ++ .../components/AuditingTable.ts | 51 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/pages/putaway/putawayDetails/components/AuditingTable.ts diff --git a/src/pages/putaway/putawayDetails/PutawayDetailsPage.ts b/src/pages/putaway/putawayDetails/PutawayDetailsPage.ts index 30c8730..cde87f4 100644 --- a/src/pages/putaway/putawayDetails/PutawayDetailsPage.ts +++ b/src/pages/putaway/putawayDetails/PutawayDetailsPage.ts @@ -2,6 +2,7 @@ import { expect, Page } from '@playwright/test'; import BasePageModel from '@/pages/BasePageModel'; +import AuditingTable from './components/AuditingTable'; import ItemDetailsTable from './components/ItemDetailsTable'; import ItemStatusTable from './components/ItemStatusTable'; import OrderHeaderTable from './components/OrderHeaderTable'; @@ -12,6 +13,7 @@ class PutawayDetailsPage extends BasePageModel { orderHeaderTable: OrderHeaderTable; itemStatusTable: ItemStatusTable; itemDetailsTable: ItemDetailsTable; + auditingTable: AuditingTable; constructor(page: Page) { super(page); @@ -19,6 +21,7 @@ class PutawayDetailsPage extends BasePageModel { this.orderHeaderTable = new OrderHeaderTable(page); this.itemStatusTable = new ItemStatusTable(page); this.itemDetailsTable = new ItemDetailsTable(page); + this.auditingTable = new AuditingTable(page); } async isLoaded() { diff --git a/src/pages/putaway/putawayDetails/components/AuditingTable.ts b/src/pages/putaway/putawayDetails/components/AuditingTable.ts new file mode 100644 index 0000000..d60b799 --- /dev/null +++ b/src/pages/putaway/putawayDetails/components/AuditingTable.ts @@ -0,0 +1,51 @@ +import { Page } from '@playwright/test'; + +import BasePageModel from '@/pages/BasePageModel'; + +class AuditingTable extends BasePageModel { + constructor(page: Page) { + super(page); + } + + get table() { + return this.page.getByRole('table'); + } + + get rows() { + return this.table.getByRole('row'); + } + + get orderedByRow() { + return this.rows.filter({ hasText: 'Ordered By' }); + } + + get orderedByValue() { + return this.orderedByRow.locator('.value'); + } + + get createdByRow() { + return this.rows.filter({ hasText: 'Created By' }); + } + + get createdByValue() { + return this.createdByRow.locator('.value'); + } + + get completedByRow() { + return this.rows.filter({ hasText: 'Completed By' }); + } + + get completedByValue() { + return this.completedByRow.locator('.value'); + } + + get updatedByRow() { + return this.rows.filter({ hasText: 'Updated By' }); + } + + get updateddByValue() { + return this.updatedByRow.locator('.value'); + } +} + +export default AuditingTable; From 0d1a561afef9d7141029405d3b86e1937351a484 Mon Sep 17 00:00:00 2001 From: Katarzyna Date: Mon, 18 May 2026 13:48:08 +0200 Subject: [PATCH 3/3] add tests for filtering on list page to existing tests --- .../putaway/assertPutawayDetailsPage.test.ts | 24 ++++ .../performPutawayAsManagerUser.test.ts | 131 ++++++++++++++++++ 2 files changed, 155 insertions(+) diff --git a/src/tests/putaway/assertPutawayDetailsPage.test.ts b/src/tests/putaway/assertPutawayDetailsPage.test.ts index 3381d45..b91ecf2 100644 --- a/src/tests/putaway/assertPutawayDetailsPage.test.ts +++ b/src/tests/putaway/assertPutawayDetailsPage.test.ts @@ -91,11 +91,13 @@ test.describe('Assert putaway details page', () => { putawayListPage, page, mainLocationService, + mainUserService, }) => { const internalLocation = await internalLocationService.getLocation(); const receivingBin = AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier; const currentLocation = await mainLocationService.getLocation(); + const mainUser = await mainUserService.getUser(); await test.step('Go to stock movement show page and assert received status', async () => { await stockMovementShowPage.goToPage(STOCK_MOVEMENT.id); @@ -301,5 +303,27 @@ test.describe('Assert putaway details page', () => { 'Completed' ); }); + + await test.step('Filter by completed status and ordered by on putaway list page', async () => { + await putawayListPage.clearFilteringButton.click(); + await putawayListPage.statusFilter.click(); + await putawayListPage.getStatus('Completed'); + await putawayListPage.orderedByFilter.click(); + await putawayListPage.orderedByTextInput.fill(mainUser.name); + await putawayListPage.getOrderedBy(mainUser.name); + await putawayListPage.searchButton.click(); + }); + + await test.step('Assert filtering not reset when go through pages of results', async () => { + await expect(putawayListPage.statusFilter).toContainText('Completed'); + await expect(putawayListPage.orderedByFilter).toContainText( + mainUser.name + ); + await putawayListPage.nextButton.click(); + await expect(putawayListPage.statusFilter).toContainText('Completed'); + await expect(putawayListPage.orderedByFilter).toContainText( + mainUser.name + ); + }); }); }); diff --git a/src/tests/putaway/performPutawayAsManagerUser.test.ts b/src/tests/putaway/performPutawayAsManagerUser.test.ts index 793c94d..12a6f49 100644 --- a/src/tests/putaway/performPutawayAsManagerUser.test.ts +++ b/src/tests/putaway/performPutawayAsManagerUser.test.ts @@ -225,4 +225,135 @@ test.describe('Perform putaway as manager user', () => { await managerUserPage.close(); }); }); + + test('Create pening putaway as manager user and use filters on list page', async ({ + managerUserContext, + internalLocationService, + putawayListPage, + managerUserService, + putawayDetailsPage, + mainUserService, + createPutawayPage, + }) => { + const internalLocation = await internalLocationService.getLocation(); + const managerUserPage = await managerUserContext.newPage(); + const navbar = new Navbar(managerUserPage); + const stockMovementShowPage = new StockMovementShowPage(managerUserPage); + const createPutawayPageManagerUser = new CreatePutawayPage(managerUserPage); + const managerUser = await managerUserService.getUser(); + const mainUser = await mainUserService.getUser(); + + await test.step('Go to create putaway page', async () => { + await stockMovementShowPage.goToPage(STOCK_MOVEMENT.id); + await stockMovementShowPage.isLoaded(); + await RefreshCachesUtils.refreshCaches({ + navbar, + }); + await navbar.inbound.click(); + await navbar.createPutaway.click(); + await createPutawayPageManagerUser.isLoaded(); + }); + + await test.step('Start putaway', async () => { + await createPutawayPageManagerUser.table.row(0).checkbox.click(); + await createPutawayPageManagerUser.startPutawayButton.click(); + await createPutawayPageManagerUser.startStep.isLoaded(); + }); + + await test.step('Select bins to putaway and save pending putaway', async () => { + await createPutawayPageManagerUser.startStep.table + .row(1) + .putawayBinSelect.click(); + await createPutawayPageManagerUser.startStep.table + .row(1) + .getPutawayBin(internalLocation.name) + .click(); + await createPutawayPageManagerUser.startStep.table + .row(2) + .putawayBinSelect.click(); + await createPutawayPageManagerUser.startStep.table + .row(2) + .getPutawayBin(internalLocation.name) + .click(); + await createPutawayPageManagerUser.startStep.saveButton.click(); + await managerUserPage.close(); + }); + + await test.step('Go to list putaway page as main user and use filters', async () => { + await putawayListPage.goToPage(); + await putawayListPage.isLoaded(); + await expect(putawayListPage.table.row(1).statusTag).toHaveText( + 'Pending' + ); + const putawayOrderIdentifier = await putawayListPage.table + .row(1) + .orderNumber.textContent(); + await putawayListPage.searchField.fill( + `${putawayOrderIdentifier}`.toString().trim() + ); + await putawayListPage.orderedByFilter.click(); + await putawayListPage.orderedByTextInput.fill(managerUser.name); + await putawayListPage.getOrderedBy(managerUser.name); + await putawayListPage.searchButton.click(); + await expect(putawayListPage.table.row(1).orderedBy).toContainText( + managerUser.name + ); + }); + + await test.step('Clear applied filters and filter by created by ans status', async () => { + const putawayOrderIdentifier = await putawayListPage.table + .row(1) + .orderNumber.textContent(); + await putawayListPage.isLoaded(); + await putawayListPage.clearFilteringButton.click(); + await putawayListPage.statusFilter.click(); + await putawayListPage.getStatus('Pending'); + + await putawayListPage.createdByFilter.click(); + await putawayListPage.createdByTextInput.fill(managerUser.name); + await putawayListPage.getCreatedBy(managerUser.name); + await putawayListPage.searchButton.click(); + await expect(putawayListPage.table.row(1).orderNumber).toContainText( + `${putawayOrderIdentifier}` + ); + await expect(putawayListPage.table.row(1).statusTag).toHaveText( + 'Pending' + ); + }); + + await test.step('Go to putaway details page', async () => { + await putawayListPage.table.row(1).actionsButton.click(); + await putawayListPage.table.row(1).viewOrderDetails.click(); + await putawayDetailsPage.isLoaded(); + }); + + await test.step('Assert data in auditing table', async () => { + await putawayDetailsPage.isLoaded(); + await expect( + putawayDetailsPage.auditingTable.orderedByValue + ).toContainText(managerUser.name); + await expect( + putawayDetailsPage.auditingTable.createdByValue + ).toContainText(managerUser.name); + }); + + await test.step('Edit and complete putaway', async () => { + await putawayDetailsPage.editButton.click(); + await createPutawayPage.startStep.isLoaded(); + await createPutawayPage.startStep.nextButton.click(); + await createPutawayPage.completeStep.isLoaded(); + await createPutawayPage.completeStep.completePutawayButton.click(); + }); + + await test.step('Assert completing putaway', async () => { + await putawayDetailsPage.isLoaded(); + await expect(putawayDetailsPage.statusTag).toHaveText('Completed'); + await expect( + putawayDetailsPage.auditingTable.completedByValue + ).toContainText(mainUser.name); + await expect( + putawayDetailsPage.auditingTable.updateddByValue + ).toContainText(mainUser.name); + }); + }); });