Skip to content

Commit 84e175b

Browse files
authored
NETOBSERV-967 skip ticks when popups are open (#375)
* skip ticks when popups are open * updated testing * reload page after column save * avoid updating while popups are open * fix testing
1 parent 967e4c8 commit 84e175b

File tree

8 files changed

+71
-24
lines changed

8 files changed

+71
-24
lines changed

web/cypress/e2e/overview/overview.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('netflow-overview', () => {
2121

2222
//Save
2323
cy.get('#overview-panels-modal').contains('Save').click();
24-
cy.checkPanels(6);
24+
cy.checkPanels(14);
2525

2626
//reopen modal
2727
cy.openPanelsModal();

web/cypress/e2e/table/table.spec.ts

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,13 @@ describe('netflow-table', () => {
1313

1414
it('displays table and rows', () => {
1515
cy.get('#table-container').should('exist');
16-
//expect 100 results without filters
17-
cy.get('#table-container').find('tr').its('length').should('be.gte', 100);
18-
cy.get('#flowsCount').contains('100+ flows');
19-
20-
cy.addCommonFilter('namespace', c.namespace);
21-
cy.addCommonFilter('name', c.pod);
22-
cy.changeQueryOption('Match all');
23-
cy.changeQueryOption('Both');
16+
//expect 50 results without filters
17+
cy.get('#table-container').find('tr').its('length').should('be.gte', 50);
18+
cy.get('#flowsCount').contains('50+ Flows');
19+
20+
cy.addFilter('src_namespace', c.namespace);
21+
cy.addFilter('src_name', c.pod);
22+
cy.changeQueryOption('Show duplicates');
2423
cy.changeQueryOption('1000');
2524
cy.changeTimeRange('Last 1 day');
2625
});
@@ -29,12 +28,33 @@ describe('netflow-table', () => {
2928
//first open modal
3029
cy.openColumnsModal();
3130

31+
//Unselect all columns
32+
cy.get('#columns-modal').contains('Select all').click();
33+
cy.get('#columns-modal').contains('Unselect all').click();
34+
35+
//Select column using checkboxes
36+
cy.checkPopupItems('#columns-modal', ['StartTime', 'K8S_Object', 'AddrPort', 'Packets']);
37+
38+
//Save
39+
cy.get('#columns-modal').contains('Save').click();
40+
//Should not have nested columns and have 4 columns
41+
cy.checkColumns(0, 4);
42+
43+
//reload the page
44+
cy.reload();
45+
46+
//Should have remembered the columns
47+
cy.checkColumns(0, 4);
48+
49+
//reopen modal
50+
cy.openColumnsModal();
51+
3252
//Select all columns
3353
cy.get('#columns-modal').contains('Select all').click();
3454

3555
//Save
3656
cy.get('#columns-modal').contains('Save').click();
37-
cy.checkColumns(24, 48);
57+
cy.checkColumns(26, 52);
3858

3959
//reopen modal
4060
cy.openColumnsModal();

web/cypress/e2e/topology/topology.spec.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@ describe('netflow-topology', () => {
1616
//expect some namespaces & edges in the default layer
1717
cy.get('[data-layer-id="default"]').children().its('length').should('be.gte', 100);
1818

19-
cy.addCommonFilter('namespace', c.namespace, true);
20-
cy.addCommonFilter('name', c.pod, true);
19+
cy.addFilter('src_namespace', c.namespace, true);
20+
cy.addFilter('src_name', c.pod, true);
2121
cy.changeMetricType('Packets');
2222
cy.changeMetricType('Bytes');
23-
cy.changeQueryOption('Both', true);
24-
cy.changeQueryOption('Match all', true);
2523
cy.changeTimeRange('Last 1 day', true);
2624
});
2725

web/cypress/support/commands.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Cypress.Commands.add('showDisplayOptions', () => {
6868
})
6969
});
7070

71-
Cypress.Commands.add('checkPanels', (panels = 4) => {
71+
Cypress.Commands.add('checkPanels', (panels = 7) => {
7272
cy.get('#overview-flex').find('.overview-card').its('length').should('eq', panels);
7373
});
7474

@@ -109,6 +109,12 @@ Cypress.Commands.add('selectPopupItems', (id, names) => {
109109
}
110110
});
111111

112+
Cypress.Commands.add('checkPopupItems', (id, ids) => {
113+
for (let i = 0; i < ids.length; i++) {
114+
cy.get(id).find('.modal-body').find(`#${ids[i]}`).check();
115+
}
116+
});
117+
112118
Cypress.Commands.add('sortColumn', (name) => {
113119
cy.get('thead').contains(name).click();
114120
cy.get('[aria-sort="ascending"]').should('have.length', 1);
@@ -132,7 +138,7 @@ Cypress.Commands.add('checkContent', (topology) => {
132138
}
133139
});
134140

135-
Cypress.Commands.add('addCommonFilter', (filter, value, topology) => {
141+
Cypress.Commands.add('addFilter', (filter, value, topology) => {
136142
cy.get('#column-filter-toggle').click();
137143
cy.get('.pf-c-accordion__expanded-content-body').find(`#${filter}`).click();
138144
cy.get('.pf-c-accordion__expanded-content-body').should('not.exist');
@@ -182,10 +188,11 @@ declare global {
182188
checkColumns(groups?: number, cols?: number): Chainable<Element>
183189
openColumnsModal(): Chainable<Element>
184190
selectPopupItems(id: string, names: string[]): Chainable<Element>
191+
checkPopupItems(id: string, ids: string[]): Chainable<Element>
185192
sortColumn(name: string): Chainable<Element>
186193
dropdownSelect(id: string, name: string): Chainable<Element>
187194
checkContent(topology?: boolean): Chainable<Element>
188-
addCommonFilter(filter: string, value: string, topology?: boolean): Chainable<Element>
195+
addFilter(filter: string, value: string, topology?: boolean): Chainable<Element>
189196
changeQueryOption(name: string, topology?: boolean): Chainable<Element>
190197
changeTimeRange(name: string, topology?: boolean): Chainable<Element>
191198
changeMetricFunction(name: string): Chainable<Element>

web/cypress/support/const.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//set all your shared const here
2-
export const url = 'http://localhost:9000/netflow-traffic';
3-
// export const url = 'http://localhost:9001';
2+
// export const url = 'http://localhost:9000/netflow-traffic';
3+
export const url = 'http://localhost:9001';
44
export const namespace = 'netobserv{enter}';
55
export const pod = 'flowlogs-pipeline';
66
export const waitTime = 3000;

web/src/components/modals/columns-modal.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ export const ColumnsModal: React.FC<{
3838
const { t } = useTranslation('plugin__netobserv-plugin');
3939

4040
React.useEffect(() => {
41-
setUpdatedColumns(_.cloneDeep(columns));
42-
}, [columns]);
41+
if (!isModalOpen || _.isEmpty(updatedColumns)) {
42+
setUpdatedColumns(_.cloneDeep(columns));
43+
}
44+
// eslint-disable-next-line react-hooks/exhaustive-deps
45+
}, [columns, isModalOpen]);
4346

4447
React.useEffect(() => {
4548
let allSelected = true;

web/src/components/modals/overview-panels-modal.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ export const OverviewPanelsModal: React.FC<{
3838
const { t } = useTranslation('plugin__netobserv-plugin');
3939

4040
React.useEffect(() => {
41-
setUpdatedPanels(_.cloneDeep(panels));
42-
}, [panels]);
41+
if (!isModalOpen || _.isEmpty(updatedPanels)) {
42+
setUpdatedPanels(_.cloneDeep(panels));
43+
}
44+
// eslint-disable-next-line react-hooks/exhaustive-deps
45+
}, [isModalOpen, panels]);
4346

4447
React.useEffect(() => {
4548
let allSelected = true;

web/src/components/netflow-traffic.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,10 @@ export const NetflowTraffic: React.FC<{
591591
if (!initState.current.includes('forcedFiltersLoaded') || !initState.current.includes('configLoaded')) {
592592
console.error('tick skipped', initState.current);
593593
return;
594+
} else if (isTRModalOpen || isOverviewModalOpen || isColModalOpen || isExportModalOpen) {
595+
// also skip tick if modal is open
596+
console.debug('tick skipped since modal is open');
597+
return;
594598
}
595599

596600
setLoading(true);
@@ -644,7 +648,19 @@ export const NetflowTraffic: React.FC<{
644648
})
645649
);
646650
}
647-
}, [buildFlowQuery, config.features, selectedViewId, manageWarnings, fetchTable, fetchOverview, fetchTopology]);
651+
}, [
652+
isTRModalOpen,
653+
isOverviewModalOpen,
654+
isColModalOpen,
655+
isExportModalOpen,
656+
buildFlowQuery,
657+
config.features,
658+
selectedViewId,
659+
fetchTable,
660+
fetchOverview,
661+
fetchTopology,
662+
manageWarnings
663+
]);
648664

649665
usePoll(tick, interval);
650666

0 commit comments

Comments
 (0)