Skip to content

Commit 197eac4

Browse files
authored
OBPIH-7540: Putaway - validations when qty removed from receiving bin when pending putaway created (#78)
* add new pages * add new elements to existing pages * add record stock table * add edit transaction page and components * add test for validate qty removed from receiving bin * add improvements after review
1 parent 3a4c39a commit 197eac4

8 files changed

Lines changed: 399 additions & 0 deletions

File tree

src/fixtures/fixtures.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import PutawayDetailsPage from '@/pages/putaway/putawayDetails/PutawayDetailsPag
3333
import ReceivingPage from '@/pages/receiving/ReceivingPage';
3434
import OldViewShipmentPage from '@/pages/stockMovementShow/OldViewShipmentPage';
3535
import StockMovementShowPage from '@/pages/stockMovementShow/StockMovementShowPage';
36+
import EditTransactionPage from '@/pages/transactions/EditTransactionPgage';
3637
import TransactionListPage from '@/pages/transactions/TransactionListPage';
3738
import CreateUserPage from '@/pages/user/CreateUserPage';
3839
import EditUserPage from '@/pages/user/editUser/EditUserPage';
@@ -71,6 +72,7 @@ type Fixtures = {
7172
oldViewShipmentPage: OldViewShipmentPage;
7273
putawayListPage: PutawayListPage;
7374
productEditPage: ProductEditPage;
75+
editTransactionPage: EditTransactionPage;
7476
// COMPONENTS
7577
navbar: Navbar;
7678
locationChooser: LocationChooser;
@@ -145,6 +147,8 @@ export const test = baseTest.extend<Fixtures>({
145147
use(new OldViewShipmentPage(page)),
146148
putawayListPage: async ({ page }, use) => use(new PutawayListPage(page)),
147149
productEditPage: async ({ page }, use) => use(new ProductEditPage(page)),
150+
editTransactionPage: async ({ page }, use) =>
151+
use(new EditTransactionPage(page)),
148152
// COMPONENTS
149153
navbar: async ({ page }, use) => use(new Navbar(page)),
150154
locationChooser: async ({ page }, use) => use(new LocationChooser(page)),

src/pages/product/productShow/sections/RecordStockSection.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ import { Page } from '@playwright/test';
22

33
import BasePageModel from '@/pages/BasePageModel';
44
import LineItemsTable from '@/pages/product/productShow/sections/components/LineItemsTable';
5+
import RecordStockTable from '@/pages/product/productShow/sections/components/RecortStockTable';
56

67
class RecordStockSection extends BasePageModel {
78
lineItemsTable: LineItemsTable;
9+
recordStockTable: RecordStockTable;
810

911
constructor(page: Page) {
1012
super(page);
1113
this.lineItemsTable = new LineItemsTable(page);
14+
this.recordStockTable = new RecordStockTable(page);
1215
}
1316
}
1417

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Locator, Page } from '@playwright/test';
2+
3+
import BasePageModel from '@/pages/BasePageModel';
4+
5+
class RecordStockTable extends BasePageModel {
6+
constructor(page: Page) {
7+
super(page);
8+
}
9+
10+
get section() {
11+
return this.page.getByRole('region', { name: 'Record Stock' });
12+
}
13+
14+
get table() {
15+
return this.section.getByRole('table');
16+
}
17+
18+
get rows() {
19+
return this.table.getByRole('row');
20+
}
21+
22+
row(index: number) {
23+
return new Row(this.page, this.rows.nth(index));
24+
}
25+
}
26+
27+
class Row extends BasePageModel {
28+
row: Locator;
29+
constructor(page: Page, row: Locator) {
30+
super(page);
31+
this.row = row;
32+
}
33+
}
34+
35+
export default RecordStockTable;

src/pages/putaway/steps/CompleteStep.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ class CompleteStep extends BasePageModel {
4141
get editButton() {
4242
return this.page.getByTestId('edit-button').first();
4343
}
44+
45+
get validationOnQtyInReceivingBin() {
46+
return this.page
47+
.locator('[class*="alert"]')
48+
.getByText(
49+
/Quantity available 0 is less than quantity to putaway \d+ for product/
50+
);
51+
}
4452
}
4553

4654
export default CompleteStep;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Page } from '@playwright/test';
2+
3+
import BasePageModel from '@/pages/BasePageModel';
4+
import TransactionDetailsHeaderTab from '@/pages/transactions/components/TransactionDetailsHeaderTab';
5+
6+
class EditTransactionPage extends BasePageModel {
7+
transactionDetailsHeaderTab: TransactionDetailsHeaderTab;
8+
9+
constructor(page: Page) {
10+
super(page);
11+
this.transactionDetailsHeaderTab = new TransactionDetailsHeaderTab(page);
12+
}
13+
14+
get saveButton() {
15+
return this.page.getByRole('button', { name: 'Save' });
16+
}
17+
}
18+
19+
export default EditTransactionPage;
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { Locator, Page } from '@playwright/test';
2+
3+
import BasePageModel from '@/pages/BasePageModel';
4+
5+
class TransactionDetailsHeaderTab extends BasePageModel {
6+
constructor(page: Page) {
7+
super(page);
8+
}
9+
10+
get section() {
11+
return this.page.locator('#transaction-header');
12+
}
13+
14+
get table() {
15+
return this.section.getByRole('table');
16+
}
17+
18+
get rows() {
19+
return this.table.getByRole('row');
20+
}
21+
22+
row(index: number) {
23+
return new Row(this.page, this.rows.nth(index));
24+
}
25+
}
26+
27+
class Row extends BasePageModel {
28+
row: Locator;
29+
constructor(page: Page, row: Locator) {
30+
super(page);
31+
this.row = row;
32+
}
33+
34+
get transactionDateMinuteSelect() {
35+
return this.row.locator('select[name="transactionDate_minute"]');
36+
}
37+
38+
async decreaseMinute() {
39+
const selectedValue = await this.transactionDateMinuteSelect.inputValue();
40+
const parsedValue = parseInt(selectedValue || '0', 10);
41+
const nextMinute = (parsedValue - 1 + 60) % 60;
42+
const optionToSelect = String(nextMinute).padStart(2, '0');
43+
await this.transactionDateMinuteSelect.selectOption(optionToSelect);
44+
}
45+
}
46+
47+
export default TransactionDetailsHeaderTab;

src/pages/transactions/components/TransactionTable.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ class TransactionTable extends BasePageModel {
2424
.locator('.action-menu-item')
2525
.getByRole('link', { name: 'Delete' });
2626
}
27+
28+
get editButton() {
29+
return this.page
30+
.locator('.action-menu-item')
31+
.getByRole('link', { name: 'Edit' });
32+
}
2733
}
2834

2935
class Row extends BasePageModel {

0 commit comments

Comments
 (0)