Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 49 additions & 9 deletions src/pages/putaway/list/PutawayListPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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;
4 changes: 4 additions & 0 deletions src/pages/putaway/list/PutawayListTable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,5 +56,9 @@ class Row extends BasePageModel {
get generatePdf() {
return this.row.getByTestId('generate-pdf-item');
}

get orderedBy() {
return this.row.getByTestId('ordered-by');
}
}
export default PutawayListTable;
3 changes: 3 additions & 0 deletions src/pages/putaway/putawayDetails/PutawayDetailsPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -12,13 +13,15 @@ class PutawayDetailsPage extends BasePageModel {
orderHeaderTable: OrderHeaderTable;
itemStatusTable: ItemStatusTable;
itemDetailsTable: ItemDetailsTable;
auditingTable: AuditingTable;

constructor(page: Page) {
super(page);
this.summaryTable = new SummaryTable(page);
this.orderHeaderTable = new OrderHeaderTable(page);
this.itemStatusTable = new ItemStatusTable(page);
this.itemDetailsTable = new ItemDetailsTable(page);
this.auditingTable = new AuditingTable(page);
}

async isLoaded() {
Expand Down
51 changes: 51 additions & 0 deletions src/pages/putaway/putawayDetails/components/AuditingTable.ts
Original file line number Diff line number Diff line change
@@ -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;
24 changes: 24 additions & 0 deletions src/tests/putaway/assertPutawayDetailsPage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -315,5 +317,27 @@ test.describe('Assert putaway details page', () => {
generatePutawayPdfFileName
);
});

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
);
});
});
});
131 changes: 131 additions & 0 deletions src/tests/putaway/performPutawayAsManagerUser.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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}`
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can't you just use:

Suggested change
`${putawayOrderIdentifier}`
putawayOrderIdentifier

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like I can't:
Screenshot from 2026-05-18 15-26-02

);
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);
});
});
});
Loading