Skip to content

Commit 2b9f020

Browse files
vmendezMarkLogic Builder
authored andcommitted
DHFPROD-10528: Fix intermittent failures on Monitor
DHFPROD-10528: Fix intermittent failures on Monitor WIP DHFPROD-10528: Fix intermittent failures on Monitor WIP WIP WIP WIP WIP WIP WIP WIP
1 parent f04ab38 commit 2b9f020

File tree

5 files changed

+122
-74
lines changed

5 files changed

+122
-74
lines changed

marklogic-data-hub-central/ui/e2e/cypress/e2e/monitor/monitorTableValidations.cy.tsx

Lines changed: 56 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,34 @@ import entitiesSidebar from "../../support/pages/entitiesSidebar";
44
import {toolbar} from "../../support/components/common";
55
import monitorPage from "../../support/pages/monitor";
66
import browsePage from "../../support/pages/browse";
7-
import runPage from "../../support/pages/run";
87
import loadPage from "../../support/pages/load";
9-
import "cypress-wait-until";
8+
import runPage from "../../support/pages/run";
109

1110
describe("Monitor Tile", () => {
1211
before(() => {
1312
cy.loginAsDeveloper().withRequest();
13+
cy.createFlowWithApi(flowName);
14+
cy.addStepToFlowWithApi(flowName, "loadPersonJSON", "ingestion");
15+
cy.addStepToFlowWithApi(flowName, "mapPersonJSON", "mapping");
16+
cy.addStepToFlowWithApi(flowName, "match-person", "matching");
17+
cy.addStepToFlowWithApi(flowName, "merge-person", "merging");
18+
cy.addStepToFlowWithApi(flowName, "master-person", "mastering");
19+
cy.addStepToFlowWithApi(flowName, "mapCustomersJSON", "mapping");
20+
cy.addStepToFlowWithApi(flowName, "mapClientJSON", "mapping");
21+
cy.addStepToFlowWithApi(flowName, "loadPersonJSON", "ingestion");
22+
cy.addStepToFlowWithApi(flowName, "mapOfficeStep", "mapping");
23+
runPage.navigate();
24+
cy.intercept("GET", "/api/jobs/**").as("runResponse");
25+
runPage.runFlow(flowName);
26+
cy.uploadFile("patients/first-name-double-metaphone1.json");
27+
cy.uploadFile("patients/first-name-double-metaphone2.json");
28+
cy.wait("@runResponse");
29+
cy.waitForAsyncRequest();
30+
runPage.verifyFlowModalCompleted(flowName);
31+
runPage.closeFlowStatusModal(flowName);
32+
});
33+
34+
beforeEach(() => {
1435
monitorPage.navigate();
1536
});
1637

@@ -41,44 +62,7 @@ describe("Monitor Tile", () => {
4162
let orginalDateTimeArr: any[] = [];
4263
const flowName = "testMonitor";
4364

44-
it("Can create flow and add steps to flow and reorder flow", {defaultCommandTimeout: 120000}, () => {
45-
//Verify create flow and add all user-defined steps to flow via Run tile
46-
toolbar.getRunToolbarIcon().should("be.visible").click();
47-
cy.waitForAsyncRequest();
48-
runPage.createFlowButton().click({force: true});
49-
runPage.newFlowModal().should("be.visible");
50-
runPage.setFlowName(flowName);
51-
loadPage.confirmationOptions("Save").click();
52-
runPage.addStep(flowName);
53-
runPage.addStepToFlow("loadPersonJSON");
54-
runPage.addStep(flowName);
55-
runPage.addStepToFlow("mapPersonJSON");
56-
runPage.addStep(flowName);
57-
runPage.addStepToFlow("match-person");
58-
runPage.addStep(flowName);
59-
runPage.addStepToFlow("merge-person");
60-
runPage.addStep(flowName);
61-
runPage.addStepToFlow("master-person");
62-
runPage.addStep(flowName);
63-
runPage.addStepToFlow("mapCustomersJSON");
64-
runPage.addStep(flowName);
65-
runPage.addStepToFlow("mapClientJSON");
66-
runPage.addStep(flowName);
67-
runPage.addStepToFlow("mapOfficeStep");
68-
runPage.addStep(flowName);
69-
70-
cy.intercept("GET", "/api/jobs/**").as("runResponse");
71-
runPage.runFlow(flowName);
72-
cy.uploadFile("patients/first-name-double-metaphone1.json");
73-
cy.uploadFile("patients/first-name-double-metaphone2.json");
74-
cy.wait("@runResponse");
75-
cy.waitForAsyncRequest();
76-
runPage.verifyFlowModalCompleted(flowName);
77-
runPage.closeFlowStatusModal(flowName);
78-
});
79-
8065
it("Validate column order for Step Name, Step Type, StatusEntity, Type Start, Date and Time part 1", () => {
81-
monitorPage.navigate();
8266
cy.log("**expand table and get data column of JobId**");
8367
monitorPage.getTableRows().then(($els) => {
8468
return (
@@ -156,7 +140,6 @@ describe("Monitor Tile", () => {
156140
});
157141

158142
it("Ascending order validations Validate column order for Step Name, Step Type, StatusEntity, Type Start, Date and Time ", () => {
159-
160143
cy.log("**order original job id array**");
161144
firstPageTableCellsJobId.forEach(element => cy.log(element));
162145

@@ -199,7 +182,7 @@ describe("Monitor Tile", () => {
199182

200183
it("Descending order validations for column order for Step Name, Step Type, StatusEntity, Type Start, Date and Time ", () => {
201184
cy.log("**check step name order DESC**");
202-
monitorPage.getOrderColumnMonitorTable("Step Name").should("exist").scrollIntoView().should("be.visible").dblclick({force: true}).then(() => {
185+
monitorPage.getOrderColumnMonitorTable("Step Name").should("exist").scrollIntoView().should("be.visible").click({force: true}).click({force: true}).then(() => {
203186
monitorPage.getTableNestedRows().should("be.visible");
204187
monitorPage.getRowData(firstPageTableCellsJobId, "stepNameDiv").then(($row) => {
205188
Cypress.$.makeArray($row)
@@ -212,7 +195,7 @@ describe("Monitor Tile", () => {
212195
});
213196

214197
cy.log("**check step type order DESC**");
215-
monitorPage.getOrderColumnMonitorTable("Step Type").should("exist").scrollIntoView().should("be.visible").dblclick({force: true}).then(() => {
198+
monitorPage.getOrderColumnMonitorTable("Step Type").should("exist").scrollIntoView().should("be.visible").click({force: true}).click({force: true}).then(() => {
216199
monitorPage.getTableNestedRows().should("be.visible");
217200
monitorPage.getRowData(firstPageTableCellsJobId, "stepType").then(($row) => {
218201
Cypress.$.makeArray($row)
@@ -225,7 +208,7 @@ describe("Monitor Tile", () => {
225208
});
226209

227210
cy.log("**check step status order DESC**");
228-
monitorPage.getOrderColumnMonitorTable("Status").should("exist").scrollIntoView().should("be.visible").dblclick({force: true}).then(() => {
211+
monitorPage.getOrderColumnMonitorTable("Status").should("exist").scrollIntoView().should("be.visible").click({force: true}).click({force: true}).then(() => {
229212
monitorPage.getTableNestedRows().should("be.visible");
230213
monitorPage.getRowData(firstPageTableCellsJobId, "stepStatus").then(($row) => {
231214
Cypress.$.makeArray($row)
@@ -240,7 +223,7 @@ describe("Monitor Tile", () => {
240223
});
241224

242225
cy.log("**check Entity Type order DESC**");
243-
monitorPage.getOrderColumnMonitorTable("Entity Type").should("exist").scrollIntoView().should("be.visible").dblclick({force: true}).then(() => {
226+
monitorPage.getOrderColumnMonitorTable("Entity Type").should("exist").scrollIntoView().should("be.visible").click({force: true}).click({force: true}).then(() => {
244227
monitorPage.getTableNestedRows().should("be.visible");
245228
monitorPage.getRowData(firstPageTableCellsJobId, "stepEntityType").then(($row) => {
246229
Cypress.$.makeArray($row)
@@ -253,7 +236,7 @@ describe("Monitor Tile", () => {
253236
});
254237

255238
cy.log("**check step datetime order DESC**");
256-
monitorPage.getOrderColumnMonitorTable("Start Date and Time").should("exist").scrollIntoView().should("be.visible").dblclick({force: true}).then(() => {
239+
monitorPage.getOrderColumnMonitorTable("Start Date and Time").should("exist").scrollIntoView().should("be.visible").click({force: true}).click({force: true}).then(() => {
257240
monitorPage.getTableNestedRows().should("be.visible");
258241
monitorPage.getRowData(firstPageTableCellsJobId, "stepStartDate").then(($row) => {
259242
Cypress.$.makeArray($row)
@@ -274,8 +257,8 @@ describe("Monitor Tile", () => {
274257
mappingStepDetail.selectCustomPageSourceTable("2");
275258

276259
cy.log("**Go to another page and back**");
277-
toolbar.getLoadToolbarIcon().click();
278-
toolbar.getMonitorToolbarIcon().click();
260+
loadPage.navigate();
261+
monitorPage.navigate();
279262

280263
cy.log("**Checking and setting in session new data**");
281264
mappingStepDetail.verifyContent("10 / page");
@@ -296,8 +279,8 @@ describe("Monitor Tile", () => {
296279
});
297280

298281
cy.log("**Go to another page and back to verify data from session storage**");
299-
toolbar.getLoadToolbarIcon().click();
300-
toolbar.getMonitorToolbarIcon().click();
282+
loadPage.navigate();
283+
monitorPage.navigate();
301284
monitorPage.verifyVisibilityTableHeader("Load", false);
302285
monitorPage.verifyVisibilityTableHeader("Flow Name", false);
303286
monitorPage.getColumnSelectorIcon().click();
@@ -408,6 +391,7 @@ describe("Monitor Tile", () => {
408391
});
409392

410393
it("Verify facets can be selected, applied and cleared using clear text", () => {
394+
browsePage.clickShowMoreLink("step-type");
411395
monitorPage.clickFacetCheckbox("step-type", "ingestion");
412396
browsePage.getFacetSearchSelectionCount("step-type").should("contain", "1");
413397
browsePage.getClearFacetSelection("step-type").should("be.visible").click({force: true});
@@ -416,40 +400,40 @@ describe("Monitor Tile", () => {
416400

417401
it("Apply facets, unchecking them should not recheck original facets", () => {
418402
browsePage.clearAllFacets();
419-
browsePage.getShowMoreLink("step").scrollIntoView();
420403
browsePage.clickShowMoreLink("step");
421-
browsePage.getShowMoreLink("step").scrollIntoView();
422-
cy.get("[data-testid=stepName-search-input]").then(($ele) => {
423-
if ($ele.length) {
424-
browsePage.clickPopoverSearch("stepName");
425-
browsePage.setInputField("stepName", "loadPersonJSON");
426-
browsePage.getPopoverFacetCheckbox("loadPersonJSON").should("be.visible").click({force: true});
427-
browsePage.confirmPopoverFacets();
428-
} else {
429-
monitorPage.clickFacetCheckbox("step", "loadPersonJSON");
430-
}
431-
});
404+
432405
monitorPage.clickFacetCheckbox("step", "mapPersonJSON");
433-
browsePage.getFacetItemCheckbox("step", "loadPersonJSON").should("be.checked");
406+
monitorPage.clickFacetCheckbox("step", "loadPersonJSON");
407+
434408
browsePage.getFacetItemCheckbox("step", "mapPersonJSON").should("be.checked");
435-
browsePage.getGreySelectedFacets("loadPersonJSON").should("exist");
409+
browsePage.getFacetItemCheckbox("step", "loadPersonJSON").should("be.checked");
436410
browsePage.getGreySelectedFacets("mapPersonJSON").should("exist");
437-
browsePage.getFacetApplyButton().click();
411+
browsePage.getGreySelectedFacets("loadPersonJSON").should("exist");
412+
413+
cy.intercept("POST", "/api/jobs/stepResponses").as("stepResponses");
414+
browsePage.applyFacet();
415+
cy.wait("@stepResponses");
416+
438417
browsePage.getFacetItemCheckbox("step", "loadPersonJSON").should("be.checked");
439-
cy.get("#monitorContent").scrollTo("top", {ensureScrollable: false});
440-
cy.findByTestId("step-" + "mapPersonJSON" + "-checkbox").trigger("mousemove", {force: true});
441418
browsePage.getFacetItemCheckbox("step", "mapPersonJSON").should("be.checked");
419+
442420
browsePage.clickFacetCheckbox("status", "completed");
443421
browsePage.clickFacetCheckbox("step", "loadPersonJSON");
444-
browsePage.waitForSpinnerToDisappear();
445-
cy.findByTestId("step-" + "mapPersonJSON" + "-checkbox").trigger("mousemove", {force: true});
422+
cy.wait("@stepResponses");
423+
446424
browsePage.clickFacetCheckbox("step", "mapPersonJSON");
425+
cy.wait("@stepResponses");
426+
447427
browsePage.clickFacetCheckbox("status", "completed");
448-
cy.findByTestId("step-" + "loadPersonJSON" + "-checkbox").trigger("mousemove", {force: true});
449-
browsePage.getFacetItemCheckbox("step", "loadPersonJSON").should("not.be.checked");
450-
cy.get("#monitorContent").scrollTo("top", {ensureScrollable: false});
451-
browsePage.getFacetItemCheckbox("step", "mapPersonJSON").should("not.be.checked");
428+
429+
cy.log("Verify that neither loadPersonJSON nor mapPersonJSON are checked");
430+
browsePage.clearStepFacetsButton.should(($button) => {
431+
expect($button.attr("class")).to.contain("facet_clearInactive");
432+
});
433+
browsePage.stepSelectedCount.should("not.exist");
434+
452435
browsePage.getFacetItemCheckbox("status", "completed").should("not.be.checked");
436+
browsePage.statusSelectedCount.should("not.exist");
453437
});
454438

455439
it("Verify select, apply, remove grey and applied startTime facet", () => {

marklogic-data-hub-central/ui/e2e/cypress/support/commands.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,25 @@ Cypress.Commands.add("restoreLocalStorage", () => {
326326
localStorage.setItem(key, LOCAL_STORAGE_MEMORY[key]);
327327
});
328328
});
329+
330+
Cypress.Commands.add("createFlowWithApi", (flowName) => {
331+
return cy.request({
332+
method: "POST",
333+
url: `/api/flows`,
334+
body: {
335+
name: flowName,
336+
description: ""
337+
}
338+
});
339+
});
340+
341+
Cypress.Commands.add("addStepToFlowWithApi", (flowName, stepName, stepType) => {
342+
return cy.request({
343+
method: "POST",
344+
url: `/api/flows/${flowName}/steps`,
345+
body: {
346+
"stepName": stepName,
347+
"stepDefinitionType": stepType
348+
}
349+
});
350+
});

marklogic-data-hub-central/ui/e2e/cypress/support/index.d.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,5 +146,19 @@ declare namespace Cypress {
146146
* cy.get("input").typeTab()
147147
*/
148148
typeTab(): Chainable<Element>
149+
150+
/**
151+
* Create Flow using API
152+
* @example
153+
* cy.createFlowWithApi(flowName);
154+
*/
155+
createFlowWithApi(flowName: string): Chainable<Element>
156+
157+
/**
158+
* Add a step to a Flow using API
159+
* @example
160+
* cy.addStepToFlowWithApi(flowName, "loadPersonJSON", "ingestion");
161+
*/
162+
addStepToFlowWithApi(flowName:string, stepName:string, stepType:string): Chainable<Element>
149163
}
150164
}

marklogic-data-hub-central/ui/e2e/cypress/support/pages/browse.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@ class BrowsePage {
2222
return cy.get(".hc-table_row");
2323
}
2424

25+
get clearStepFacetsButton() {
26+
return cy.get("[data-cy='step-clear']");
27+
}
28+
29+
get statusSelectedCount() {
30+
return cy.get("[data-testid='status-selected-count']");
31+
}
32+
33+
get stepSelectedCount() {
34+
return cy.get("[data-testid='step-selected-count']");
35+
}
36+
2537
// common spinners
2638
// Can be moved to a common components
2739
getSpinner() {
@@ -842,6 +854,11 @@ class BrowsePage {
842854
verifyCardExist(name: string) {
843855
cy.get("div.card-body").contains(name).should("be.visible");
844856
}
857+
858+
applyFacet() {
859+
this.getFacetApplyButton().scrollIntoView().click({force: true});
860+
cy.waitForAsyncRequest();
861+
}
845862
}
846863

847864
const browsePage = new BrowsePage();

marklogic-data-hub-central/ui/e2e/cypress/support/pages/monitor.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {toolbar} from "../components/common";
22
import "cypress-wait-until";
33
import homePage from "./home";
4+
import browsePage from "./browse";
45
class MonitorPage {
56
getMonitorContainer() {
67
return cy.get(`#monitorContent`);
@@ -49,13 +50,23 @@ class MonitorPage {
4950
cy.get(`[data-testid="facet-apply-button"]`).click();
5051
cy.wait(1000);
5152
}
53+
5254
getFacetCheckbox(facetType: string, facetName: string) {
5355
return cy.get(`[data-testid=${facetType}-${facetName}-checkbox]`);
5456
}
5557

5658
clickFacetCheckbox(facetType: string, facetName: string) {
57-
this.getFacetCheckbox(facetType, facetName).scrollIntoView().click({force: true});
58-
cy.waitForAsyncRequest();
59+
cy.get("body").then(($body) => {
60+
if ($body.find(`[data-testid=${facetType}-${facetName}-checkbox]`)) {
61+
this.getFacetCheckbox(facetType, facetName).scrollIntoView().click({force: true});
62+
} else {
63+
browsePage.clickPopoverSearch(facetType);
64+
browsePage.setInputField(facetType, facetName);
65+
browsePage.getPopoverFacetCheckbox(facetName).should("be.visible").click({force: true});
66+
browsePage.confirmPopoverFacets();
67+
}
68+
cy.waitForAsyncRequest();
69+
});
5970
}
6071

6172
validateAppliedFacetTableRows(facetType: string, index: number, facetName: string) {

0 commit comments

Comments
 (0)