Skip to content

Commit 24b8d98

Browse files
authored
Merge pull request #70 from openboxes/OBPIH-7589
OBPIH-7589: Fix E2E tests after inbound refactor
2 parents 6e56ee8 + adec79f commit 24b8d98

13 files changed

Lines changed: 147 additions & 88 deletions

src/components/FormField.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,22 @@ class FormField extends BasePageModel {
1212
this.root = root ?? this.page.locator('body');
1313
}
1414

15+
async hasError() {
16+
return (
17+
(await this.field.getAttribute('class'))?.includes('has-error') ||
18+
(await this.field.getAttribute('data-testid'))?.includes('has-errors')
19+
);
20+
}
21+
22+
get fieldWithError() {
23+
return this.root.locator(
24+
`div[data-testid="form-field has-errors"][aria-label="${this.fieldName}"]`
25+
);
26+
}
27+
1528
get field() {
1629
return this.root.locator(
17-
`div[data-testid="form-field"][aria-label="${this.fieldName}"]`
30+
`div[data-testid^="form-field"][aria-label="${this.fieldName}"]`
1831
);
1932
}
2033

@@ -23,15 +36,19 @@ class FormField extends BasePageModel {
2336
}
2437

2538
get tooltip() {
26-
return this.page.getByRole('tooltip');
39+
return this.page.locator('.tippy-tooltip-content');
2740
}
2841

2942
async assertHasError() {
30-
await expect(this.field).toHaveClass(/has-error/);
43+
expect(await this.hasError()).toBeTruthy();
44+
}
45+
46+
async assertFieldWithErrorIsVisible(error: string) {
47+
await expect(this.fieldWithError).toContainText(error);
3148
}
3249

3350
async assertHasNoError() {
34-
await expect(this.field).not.toHaveClass(/has-error/);
51+
expect(await this.hasError()).toBeFalsy();
3552
}
3653
}
3754

src/pages/inbound/create/components/AddItemsTable.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ class Row extends BasePageModel {
117117
if (!_.isNil(rowValues.expirationDate)) {
118118
await test.step('Assert value in expiry date field', async () => {
119119
await expect(this.expirationDate.textbox).toHaveValue(
120-
formatDate(rowValues.expirationDate as Date)
120+
formatDate(rowValues.expirationDate as Date, 'DD/MMM/YYYY')
121121
);
122122
});
123123
}

src/pages/inbound/create/steps/AddItemsStep.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ class AddItemsStep extends BasePageModel {
9696
});
9797
}
9898
}
99+
100+
async waitForNetworkIdle() {
101+
// eslint-disable-next-line playwright/no-networkidle
102+
await this.page.waitForLoadState('networkidle');
103+
}
99104
}
100105

101106
export default AddItemsStep;

src/pages/inbound/create/steps/SendStep.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class SendStep extends BasePageModel {
1515
shipmentTypeSelect: Select;
1616
shipDateDatePicker: DatePicker;
1717
expectedDeliveryDatePicker: DatePicker;
18-
originField: TextField;
18+
originField: Select;
1919
trackingNumberField: TextField;
2020
driverNameField: TextField;
2121
commentField: TextField;
@@ -34,7 +34,7 @@ class SendStep extends BasePageModel {
3434
page,
3535
'Expected Delivery Date'
3636
);
37-
this.originField = new TextField(page, 'Origin');
37+
this.originField = new Select(page, 'Origin');
3838
this.trackingNumberField = new TextField(page, 'Tracking Number');
3939
this.driverNameField = new TextField(page, 'Driver Name');
4040
this.commentField = new TextField(page, 'Comments');
@@ -65,12 +65,12 @@ class SendStep extends BasePageModel {
6565

6666
getDocuments(documentName: string) {
6767
return this.page
68-
.locator('.dropdown-content')
68+
.locator('.dropdown-item')
6969
.getByText(documentName, { exact: true });
7070
}
7171

7272
async isLoaded() {
73-
await expect(this.originField.textbox).toBeVisible();
73+
await expect(this.originField.selectField).toBeVisible();
7474
await expect(this.destinationSelect.selectField).toBeVisible();
7575
await expect(this.shipmentTypeSelect.selectField).toBeVisible();
7676
await expect(this.shipDateDatePicker.textbox).toBeVisible();

src/pages/putaway/steps/StartStep.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class StartStep extends BasePageModel {
4747
}
4848

4949
async closeDisplayedError() {
50-
return this.page.locator('.alert-close-icon').click();
50+
return this.page.locator('.alert-close-icon').first().click();
5151
}
5252
}
5353

src/tests/inbound/createInbound/createInbound.test.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ test.describe('Create inbound stock movement', () => {
126126

127127
await test.step('Remove second item', async () => {
128128
await createInboundPage.addItemsStep.table.row(1).deleteButton.click();
129+
await createInboundPage.addItemsStep.table
130+
.row(1)
131+
.deleteButton.waitFor({ state: 'detached' });
129132
expect(await createInboundPage.addItemsStep.table.rows.count()).toBe(1);
130133
});
131134

@@ -281,7 +284,7 @@ test.describe('Values persistance between steps', () => {
281284
).toContainText(USER.name);
282285
await expect(
283286
createInboundPage.createStep.dateRequestedDatePicker.textbox
284-
).toHaveValue(formatDate(TODAY));
287+
).toHaveValue(formatDate(TODAY, 'DD/MMM/YYYY'));
285288
});
286289

287290
await test.step('Go next step (Add items)', async () => {
@@ -353,9 +356,9 @@ test.describe('Values persistance between steps', () => {
353356
});
354357

355358
await test.step('Assert data on send step', async () => {
356-
await expect(createInboundPage.sendStep.originField.textbox).toHaveValue(
357-
ORIGIN.name
358-
);
359+
await expect(
360+
createInboundPage.sendStep.originField.selectField
361+
).toContainText(ORIGIN.name);
359362
await expect(
360363
createInboundPage.sendStep.destinationSelect.selectField
361364
).toContainText(CURRENT_LOCATION.name);
@@ -373,7 +376,7 @@ test.describe('Values persistance between steps', () => {
373376
);
374377
await expect(
375378
createInboundPage.sendStep.expectedDeliveryDatePicker.textbox
376-
).toHaveValue(formatDate(EXPECTED_DELIVERY_DATE));
379+
).toHaveValue(formatDate(EXPECTED_DELIVERY_DATE, 'DD/MMM/YYYY'));
377380

378381
for (let i = 0; i < ROWS.length; i++) {
379382
const data = ROWS[i];

src/tests/inbound/createInbound/downloadDocsFromSendPage.test.ts

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,16 @@ test.describe('Download documents from inbound send page', () => {
5757
});
5858

5959
await test.step('Fill create stock movement page', async () => {
60+
await createInboundPage.createStep.descriptionField.textbox.fill(
61+
DESCRIPTION
62+
);
6063
await createInboundPage.createStep.originSelect.findAndSelectOption(
6164
ORIGIN.name
6265
);
6366
await createInboundPage.createStep.requestedBySelect.findAndSelectOption(
6467
USER.name
6568
);
6669
await createInboundPage.createStep.dateRequestedDatePicker.fill(TODAY);
67-
await createInboundPage.createStep.descriptionField.textbox.fill(
68-
DESCRIPTION
69-
);
7070
});
7171

7272
await test.step('Go to add items page)', async () => {
@@ -97,6 +97,14 @@ test.describe('Download documents from inbound send page', () => {
9797
});
9898

9999
await test.step('Expand download dropdown and assert documents in pending shipment', async () => {
100+
await expect(createInboundPage.sendStep.downloadButton).toBeDisabled();
101+
await createInboundPage.sendStep.shipmentTypeSelect.findAndSelectOption(
102+
SHIPMENT_TYPE
103+
);
104+
await createInboundPage.sendStep.expectedDeliveryDatePicker.fill(
105+
EXPECTED_DELIVERY_DATE
106+
);
107+
await expect(createInboundPage.sendStep.downloadButton).toBeEnabled();
100108
await createInboundPage.sendStep.downloadButton.click();
101109
await expect(
102110
createInboundPage.sendStep.getDocuments('Export Packing List (.xls)')
@@ -122,6 +130,7 @@ test.describe('Download documents from inbound send page', () => {
122130
});
123131

124132
await test.step('Download Export Packing List (.xls) file', async () => {
133+
await createInboundPage.sendStep.downloadButton.click();
125134
const popupPromise = page.waitForEvent('popup');
126135
await createInboundPage.sendStep
127136
.getDocuments('Export Packing List (.xls)')
@@ -131,19 +140,14 @@ test.describe('Download documents from inbound send page', () => {
131140
});
132141

133142
await test.step('Download Packing List file', async () => {
143+
await createInboundPage.sendStep.downloadButton.click();
134144
const popupPromise = page.waitForEvent('popup');
135145
await createInboundPage.sendStep.getDocuments('Packing List').click();
136146
const popup = await popupPromise;
137147
await popup.close();
138148
});
139149

140-
await test.step('Fill send page and send shipment', async () => {
141-
await createInboundPage.sendStep.shipmentTypeSelect.findAndSelectOption(
142-
SHIPMENT_TYPE
143-
);
144-
await createInboundPage.sendStep.expectedDeliveryDatePicker.fill(
145-
EXPECTED_DELIVERY_DATE
146-
);
150+
await test.step('Send shipment', async () => {
147151
await createInboundPage.sendStep.sendShipmentButton.click();
148152
await stockMovementShowPage.isLoaded();
149153
});
@@ -179,45 +183,50 @@ test.describe('Download documents from inbound send page', () => {
179183
' - Packing List.xls';
180184

181185
await test.step('Download Certificate of Donation file', async () => {
182-
const popupPromise = page.waitForEvent('popup');
183-
await createInboundPage.sendStep
184-
.getDocuments('Certificate of Donation')
185-
.click();
186-
const popup = await popupPromise;
187-
const downloadPromise = popup.waitForEvent('download');
188-
const download = await downloadPromise;
186+
await createInboundPage.sendStep.isLoaded();
187+
188+
const [popup, download] = await Promise.all([
189+
page.waitForEvent('popup'),
190+
page.waitForEvent('download'),
191+
createInboundPage.sendStep
192+
.getDocuments('Certificate of Donation')
193+
.click(),
194+
]);
195+
196+
expect(download.suggestedFilename()).toBe(certificateOfDonationFileName);
189197
await popup.close();
190-
await expect(download.suggestedFilename()).toBe(
191-
certificateOfDonationFileName
192-
);
193198
});
194199

195200
await test.step('Download Export Packing List (.xls) file', async () => {
196201
await createInboundPage.sendStep.isLoaded();
197-
const popupPromise = page.waitForEvent('popup');
198-
await createInboundPage.sendStep
199-
.getDocuments('Export Packing List (.xls)')
200-
.click();
201-
const popup = await popupPromise;
202-
const downloadPromise = popup.waitForEvent('download');
203-
const download = await downloadPromise;
202+
await createInboundPage.sendStep.downloadButton.click();
203+
204+
const [popup, download] = await Promise.all([
205+
page.waitForEvent('popup'),
206+
page.waitForEvent('download'),
207+
createInboundPage.sendStep
208+
.getDocuments('Export Packing List (.xls)')
209+
.click(),
210+
]);
211+
212+
expect(download.suggestedFilename()).toBe(exportPackingListFileName);
204213
await popup.close();
205-
await expect(download.suggestedFilename()).toBe(
206-
exportPackingListFileName
207-
);
208214
});
209215

210216
await test.step('Download Packing list file', async () => {
211217
await createInboundPage.sendStep.isLoaded();
212-
const popupPromise = page.waitForEvent('popup');
213-
await createInboundPage.sendStep.getDocuments('Packing List').click();
214-
const popup = await popupPromise;
215-
const downloadPromise = popup.waitForEvent('download');
216-
const download = await downloadPromise;
217-
await popup.close();
218-
await expect(download.suggestedFilename()).toMatch(
218+
await createInboundPage.sendStep.downloadButton.click();
219+
220+
const [popup, download] = await Promise.all([
221+
page.waitForEvent('popup'),
222+
page.waitForEvent('download'),
223+
createInboundPage.sendStep.getDocuments('Packing List').click(),
224+
]);
225+
226+
expect(download.suggestedFilename()).toMatch(
219227
/^Packing List - .*\.xls(x)?$/
220228
);
229+
await popup.close();
221230
});
222231
});
223232
});

0 commit comments

Comments
 (0)