Skip to content

Commit a0a5b0a

Browse files
authored
Merge pull request #51 from openboxes/OBPIH-6957
OBPIH-6957 add assert recipient not editable test
2 parents 61ab15b + 84496c8 commit a0a5b0a

7 files changed

Lines changed: 441 additions & 2 deletions

File tree

src/api/StockMovementService.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ class StockMovementService extends BaseServiceModel {
136136
: undefined,
137137
palletName: it?.palletName,
138138
boxName: it?.boxName,
139+
recipient: it.recipientId ? { id: it.recipientId } : undefined,
139140
})),
140141
});
141142
await this.updateStatusStockMovement(id, { status: 'CHECKING' });

src/pages/receiving/components/ReceivingTable.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ class Row extends BasePageModel {
7373
.locator('.css-5ih5ya-group react-select__group-heading')
7474
.getByText(zoneLocation, { exact: true });
7575
}
76+
77+
get recipientField() {
78+
return this.row.getByRole('cell', { name: 'Recipient' });
79+
}
7680
}
7781

7882
export default ReceivingTable;

src/pages/receiving/steps/CheckStep.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ class CheckStep extends BasePageModel {
4747
.locator('.s-alert-box-inner')
4848
.getByText('Must occur on or after Actual Shipping Date');
4949
}
50+
51+
get backToEditButton() {
52+
return this.page.getByRole('button', { name: 'Back to edit' });
53+
}
5054
}
5155

5256
export default CheckStep;
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import AppConfig from '@/config/AppConfig';
2+
import { ShipmentType } from '@/constants/ShipmentType';
3+
import { expect, test } from '@/fixtures/fixtures';
4+
import { StockMovementResponse } from '@/types';
5+
6+
test.describe('Assert bin location not clearable', () => {
7+
let STOCK_MOVEMENT: StockMovementResponse;
8+
9+
test.beforeEach(
10+
async ({
11+
supplierLocationService,
12+
stockMovementService,
13+
fourthProductService,
14+
}) => {
15+
const supplierLocation = await supplierLocationService.getLocation();
16+
const PRODUCT_FOUR = await fourthProductService.getProduct();
17+
18+
STOCK_MOVEMENT = await stockMovementService.createInbound({
19+
originId: supplierLocation.id,
20+
});
21+
22+
await stockMovementService.addItemsToInboundStockMovement(
23+
STOCK_MOVEMENT.id,
24+
[
25+
{
26+
productId: PRODUCT_FOUR.id,
27+
quantity: 10,
28+
},
29+
]
30+
);
31+
32+
await stockMovementService.sendInboundStockMovement(STOCK_MOVEMENT.id, {
33+
shipmentType: ShipmentType.AIR,
34+
});
35+
}
36+
);
37+
38+
test.afterEach(async ({ stockMovementShowPage, stockMovementService }) => {
39+
await stockMovementShowPage.goToPage(STOCK_MOVEMENT.id);
40+
const isRollbackLastReceiptButtonVisible =
41+
await stockMovementShowPage.rollbackLastReceiptButton.isVisible();
42+
const isRollbackButtonVisible =
43+
await stockMovementShowPage.rollbackButton.isVisible();
44+
45+
// due to failed test, shipment might not be received which will not show the button
46+
if (isRollbackLastReceiptButtonVisible) {
47+
await stockMovementShowPage.rollbackLastReceiptButton.click();
48+
}
49+
50+
if (isRollbackButtonVisible) {
51+
await stockMovementShowPage.rollbackButton.click();
52+
}
53+
54+
await stockMovementService.deleteStockMovement(STOCK_MOVEMENT.id);
55+
});
56+
57+
test('Assert bin location not clearable', async ({
58+
stockMovementShowPage,
59+
receivingPage,
60+
}) => {
61+
await test.step('Go to stock movement show page', async () => {
62+
await stockMovementShowPage.goToPage(STOCK_MOVEMENT.id);
63+
await stockMovementShowPage.isLoaded();
64+
});
65+
66+
await test.step('Go to shipment receiving page', async () => {
67+
await stockMovementShowPage.receiveButton.click();
68+
await receivingPage.receivingStep.isLoaded();
69+
});
70+
71+
await test.step('Assert bin location cant be cleared', async () => {
72+
await expect(
73+
receivingPage.receivingStep.table
74+
.row(1)
75+
.binLocationSelect.locator('.react-select__clear-indicator')
76+
).toBeHidden();
77+
});
78+
79+
await test.step('Split lines', async () => {
80+
await receivingPage.receivingStep.table.row(1).editButton.click();
81+
await receivingPage.receivingStep.editModal.isLoaded();
82+
await receivingPage.receivingStep.editModal.addLineButton.click();
83+
await receivingPage.receivingStep.editModal.table
84+
.row(1)
85+
.quantityShippedField.numberbox.fill('5');
86+
await receivingPage.receivingStep.editModal.table
87+
.row(0)
88+
.quantityShippedField.numberbox.fill('5');
89+
await receivingPage.receivingStep.editModal.saveButton.click();
90+
});
91+
92+
await test.step('Assertbin location field content after split linw', async () => {
93+
const receivingBin =
94+
AppConfig.instance.receivingBinPrefix + STOCK_MOVEMENT.identifier;
95+
await expect(
96+
receivingPage.receivingStep.table.row(1).binLocationSelect
97+
).toHaveText(receivingBin);
98+
await expect(
99+
receivingPage.receivingStep.table.row(2).binLocationSelect
100+
).toHaveText(receivingBin);
101+
await expect(
102+
receivingPage.receivingStep.table
103+
.row(1)
104+
.binLocationSelect.locator('.react-select__clear-indicator')
105+
).toBeHidden();
106+
await expect(
107+
receivingPage.receivingStep.table
108+
.row(2)
109+
.binLocationSelect.locator('.react-select__clear-indicator')
110+
).toBeHidden();
111+
});
112+
});
113+
});
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
import { ShipmentType } from '@/constants/ShipmentType';
2+
import { expect, test } from '@/fixtures/fixtures';
3+
import { StockMovementResponse } from '@/types';
4+
5+
test.describe('Assert recipient field when receive', () => {
6+
let STOCK_MOVEMENT: StockMovementResponse;
7+
8+
test.beforeEach(
9+
async ({
10+
supplierLocationService,
11+
stockMovementService,
12+
fourthProductService,
13+
fifthProductService,
14+
mainUserService,
15+
}) => {
16+
const supplierLocation = await supplierLocationService.getLocation();
17+
const PRODUCT_FOUR = await fourthProductService.getProduct();
18+
const PRODUCT_FIVE = await fifthProductService.getProduct();
19+
const USER = await mainUserService.getUser();
20+
21+
STOCK_MOVEMENT = await stockMovementService.createInbound({
22+
originId: supplierLocation.id,
23+
});
24+
25+
await stockMovementService.addItemsToInboundStockMovement(
26+
STOCK_MOVEMENT.id,
27+
[
28+
{
29+
productId: PRODUCT_FOUR.id,
30+
quantity: 10,
31+
recipientId: USER.id,
32+
},
33+
{
34+
productId: PRODUCT_FIVE.id,
35+
quantity: 10,
36+
},
37+
]
38+
);
39+
40+
await stockMovementService.sendInboundStockMovement(STOCK_MOVEMENT.id, {
41+
shipmentType: ShipmentType.AIR,
42+
});
43+
}
44+
);
45+
46+
test.afterEach(async ({ stockMovementShowPage, stockMovementService }) => {
47+
await stockMovementShowPage.goToPage(STOCK_MOVEMENT.id);
48+
const isRollbackLastReceiptButtonVisible =
49+
await stockMovementShowPage.rollbackLastReceiptButton.isVisible();
50+
const isRollbackButtonVisible =
51+
await stockMovementShowPage.rollbackButton.isVisible();
52+
53+
// due to failed test, shipment might not be received which will not show the button
54+
if (isRollbackLastReceiptButtonVisible) {
55+
await stockMovementShowPage.rollbackLastReceiptButton.click();
56+
}
57+
58+
if (isRollbackButtonVisible) {
59+
await stockMovementShowPage.rollbackButton.click();
60+
}
61+
62+
await stockMovementService.deleteStockMovement(STOCK_MOVEMENT.id);
63+
});
64+
65+
test('Assert recipient field filled and disabled', async ({
66+
stockMovementShowPage,
67+
receivingPage,
68+
mainUserService,
69+
}) => {
70+
await test.step('Go to stock movement show page', async () => {
71+
await stockMovementShowPage.goToPage(STOCK_MOVEMENT.id);
72+
await stockMovementShowPage.isLoaded();
73+
});
74+
75+
await test.step('Go to shipment receiving page', async () => {
76+
await stockMovementShowPage.receiveButton.click();
77+
await receivingPage.receivingStep.isLoaded();
78+
});
79+
80+
await test.step('Assert recipient field disabled and filled', async () => {
81+
const USER = await mainUserService.getUser();
82+
await expect(
83+
receivingPage.receivingStep.table.getCellValue(1, 'Recipient')
84+
).toBeEmpty();
85+
await receivingPage.receivingStep.table
86+
.row(1)
87+
.recipientField.isDisabled();
88+
await expect(
89+
receivingPage.receivingStep.table.getCellValue(2, 'Recipient')
90+
).toHaveText(USER.name);
91+
await receivingPage.receivingStep.table.row(2).recipientField.click();
92+
await receivingPage.receivingStep.table
93+
.row(2)
94+
.recipientField.getByTestId('custom-select-dropdown-menu')
95+
.isHidden();
96+
});
97+
98+
await test.step('Fill partial qty for items', async () => {
99+
await receivingPage.receivingStep.table
100+
.row(1)
101+
.receivingNowField.textbox.fill('5');
102+
await receivingPage.receivingStep.table
103+
.row(2)
104+
.receivingNowField.textbox.fill('5');
105+
await receivingPage.nextButton.click();
106+
await receivingPage.checkStep.isLoaded();
107+
});
108+
109+
await test.step('Fill partial qty for items', async () => {
110+
const USER = await mainUserService.getUser();
111+
await receivingPage.checkStep.isLoaded();
112+
await expect(
113+
receivingPage.checkStep.table.getCellValue(1, 'Recipient')
114+
).toBeEmpty();
115+
await expect(
116+
receivingPage.checkStep.table.getCellValue(2, 'Recipient')
117+
).toHaveText(USER.name);
118+
});
119+
120+
await test.step('Go backward and assert recipient field', async () => {
121+
const USER = await mainUserService.getUser();
122+
await receivingPage.checkStep.backToEditButton.click();
123+
await receivingPage.receivingStep.isLoaded();
124+
await expect(
125+
receivingPage.receivingStep.table.getCellValue(1, 'Recipient')
126+
).toBeEmpty();
127+
await receivingPage.receivingStep.table
128+
.row(1)
129+
.recipientField.isDisabled();
130+
await expect(
131+
receivingPage.receivingStep.table.getCellValue(2, 'Recipient')
132+
).toHaveText(USER.name);
133+
await receivingPage.receivingStep.table.row(2).recipientField.click();
134+
await receivingPage.receivingStep.table
135+
.row(2)
136+
.recipientField.getByTestId('custom-select-dropdown-menu')
137+
.isHidden();
138+
});
139+
140+
await test.step('Finish 1st receipt', async () => {
141+
await receivingPage.nextButton.click();
142+
await receivingPage.checkStep.isLoaded();
143+
await receivingPage.checkStep.receiveShipmentButton.click();
144+
await stockMovementShowPage.isLoaded();
145+
});
146+
147+
await test.step('Start 2nd receipt and assert recipient field', async () => {
148+
const USER = await mainUserService.getUser();
149+
await stockMovementShowPage.receiveButton.click();
150+
await receivingPage.receivingStep.isLoaded();
151+
await expect(
152+
receivingPage.receivingStep.table.getCellValue(1, 'Recipient')
153+
).toBeEmpty();
154+
await receivingPage.receivingStep.table
155+
.row(1)
156+
.recipientField.isDisabled();
157+
await expect(
158+
receivingPage.receivingStep.table.getCellValue(2, 'Recipient')
159+
).toHaveText(USER.name);
160+
await receivingPage.receivingStep.table.row(2).recipientField.click();
161+
await receivingPage.receivingStep.table
162+
.row(2)
163+
.recipientField.getByTestId('custom-select-dropdown-menu')
164+
.isHidden();
165+
});
166+
});
167+
});

0 commit comments

Comments
 (0)