Skip to content

Commit 61c13e1

Browse files
TackAdamAdam Tackett
andauthored
Cypress Test Updates (#2587)
* fix test Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix test2 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix test3 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix test4 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix more flaky test Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix modal blocking sample data Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix modal blocking sample data Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix modal blocking sample data2 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix modal blocking sample data3 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix modal blocking sample data4 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix flaky test Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix flaky test2 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix flaky test3 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix flaky test4 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix app auto complete Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix flaky test5 Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix notebooks Signed-off-by: Adam Tackett <tackadam@amazon.com> * remove notebook key Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix lodash import Signed-off-by: Adam Tackett <tackadam@amazon.com> * fix event analytics Signed-off-by: Adam Tackett <tackadam@amazon.com> --------- Signed-off-by: Adam Tackett <tackadam@amazon.com> Co-authored-by: Adam Tackett <tackadam@amazon.com>
1 parent b56f9f0 commit 61c13e1

File tree

17 files changed

+598
-225
lines changed

17 files changed

+598
-225
lines changed

.cypress/integration/app_analytics_test/app_analytics.spec.js

Lines changed: 75 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,41 +50,97 @@ describe('Creating application', () => {
5050
cy.get('[data-test-subj="createPageTitle"').should('contain', 'Create application');
5151
cy.get('[data-test-subj="logSourceAccordion"]').trigger('mouseover').click();
5252
cy.get('[data-test-subj="searchAutocompleteTextArea"]').click();
53-
cy.get('.aa-List').find('.aa-Item').should('have.length', 1);
53+
54+
// Wait for autocomplete list to appear and load suggestions
55+
cy.get('.aa-List', { timeout: 10000 }).should('be.visible');
56+
cy.get('.aa-List').find('.aa-Item', { timeout: 10000 }).should('have.length', 1);
5457
cy.get('.aa-Item').contains('source').should('exist');
58+
5559
cy.focused().type('{enter}');
56-
cy.get('.aa-List').find('.aa-Item').should('have.length', 1);
57-
cy.get('.aa-Item').contains('=').should('exist');
60+
61+
// Wait for textarea to update after selection
62+
cy.get('[data-test-subj="searchAutocompleteTextArea"]', { timeout: 10000 }).should('contain', 'source ');
63+
64+
// Wait for autocomplete to update with next suggestion (should reopen automatically after blur/focus)
65+
cy.get('.aa-List', { timeout: 10000 }).should('be.visible');
66+
cy.get('.aa-List').find('.aa-Item', { timeout: 10000 }).should('have.length', 1);
67+
cy.get('.aa-Item', { timeout: 10000 }).contains('=').should('exist');
68+
5869
cy.focused().type('{enter}');
70+
71+
// Wait for textarea to update after selection
72+
cy.get('[data-test-subj="searchAutocompleteTextArea"]', { timeout: 10000 }).should('contain', 'source = ');
73+
74+
// Type to filter indices
5975
cy.focused().type('opensearch');
60-
cy.get('[data-test-subj="searchAutocompleteTextArea"]').click();
61-
cy.get('.aa-Item').contains('opensearch_dashboards_sample_data_flights').click();
76+
77+
// Wait for autocomplete to show index suggestions
78+
cy.get('.aa-Item', { timeout: 10000 }).contains('opensearch_dashboards_sample_data_flights').should('be.visible').click();
79+
80+
// Wait for selection to complete and verify textarea was updated
81+
cy.get('[data-test-subj="searchAutocompleteTextArea"]', { timeout: 10000 }).should(
82+
'contain',
83+
'source = opensearch_dashboards_sample_data_flights '
84+
);
85+
6286
cy.focused().clear();
63-
cy.get('.aa-List').find('.aa-Item').should('have.length', 1);
87+
88+
// Wait for autocomplete to reset and show initial suggestion
89+
cy.get('.aa-List', { timeout: 10000 }).should('be.visible');
90+
cy.get('.aa-List').find('.aa-Item', { timeout: 10000 }).should('have.length', 1);
91+
6492
cy.focused().type('{enter}');
65-
cy.get('[data-test-subj="searchAutocompleteTextArea"]').should('contain', 'source ');
93+
94+
// Wait for textarea to update
95+
cy.get('[data-test-subj="searchAutocompleteTextArea"]', { timeout: 10000 }).should('contain', 'source ');
96+
97+
// Wait for autocomplete to reopen with next suggestion
98+
cy.get('.aa-List', { timeout: 10000 }).should('be.visible');
99+
cy.get('.aa-Item', { timeout: 10000 }).contains('=').should('be.visible');
100+
66101
cy.focused().type('{enter}');
67-
cy.get('[data-test-subj="searchAutocompleteTextArea"]').should('contain', 'source = ');
102+
103+
// Wait for textarea to update
104+
cy.get('[data-test-subj="searchAutocompleteTextArea"]', { timeout: 10000 }).should('contain', 'source = ');
105+
68106
cy.focused().type('opensearch');
69-
cy.get('[data-test-subj="searchAutocompleteTextArea"]').click();
70-
cy.get('.aa-Item').contains('opensearch_dashboards_sample_data_flights').click();
71-
cy.get('[data-test-subj="searchAutocompleteTextArea"]').should(
107+
108+
// Wait for autocomplete to show index suggestions
109+
cy.get('.aa-Item', { timeout: 10000 }).contains('opensearch_dashboards_sample_data_flights').should('be.visible').click();
110+
111+
// Wait for selection to complete and textarea to update
112+
cy.get('[data-test-subj="searchAutocompleteTextArea"]', { timeout: 10000 }).should(
72113
'contain',
73114
'source = opensearch_dashboards_sample_data_flights '
74115
);
116+
117+
// Click to manually trigger autocomplete (in case blur/focus cycle hasn't completed in CI)
118+
cy.get('[data-test-subj="searchAutocompleteTextArea"]').click();
119+
120+
// Wait for autocomplete to open with next suggestions
121+
cy.get('.aa-List', { timeout: 10000 }).should('be.visible');
122+
cy.get('.aa-Item', { timeout: 10000 }).should('have.length.greaterThan', 0);
123+
75124
cy.focused().type('{downArrow}');
76125
cy.focused().type('{enter}');
77126
cy.get('[data-test-subj="searchAutocompleteTextArea"]').should(
78127
'contain',
79128
'source = opensearch_dashboards_sample_data_flights, '
80129
);
130+
81131
cy.focused().type('opensearch');
82-
cy.get('[data-test-subj="searchAutocompleteTextArea"]').click();
83-
cy.get('.aa-Item').contains('opensearch_dashboards_sample_data_logs').click();
84-
cy.get('[data-test-subj="searchAutocompleteTextArea"]').should(
132+
133+
// Wait for autocomplete to show index suggestions
134+
cy.get('.aa-Item', { timeout: 10000 }).contains('opensearch_dashboards_sample_data_logs').should('be.visible').click();
135+
136+
// Wait for selection to complete
137+
cy.get('[data-test-subj="searchAutocompleteTextArea"]', { timeout: 10000 }).should(
85138
'contain',
86139
'source = opensearch_dashboards_sample_data_flights,opensearch_dashboards_sample_data_logs '
87140
);
141+
142+
// Verify autocomplete is closed after final selection
143+
cy.get('.aa-List').should('not.exist');
88144
});
89145

90146
it('Creates an application and redirects to application', () => {
@@ -369,9 +425,13 @@ describe('Viewing application', () => {
369425

370426
it('Saves visualization #1 to panel', () => {
371427
cy.get('[data-test-subj="app-analytics-panelTab"]').click();
428+
429+
// Wait for panel to load
430+
cy.get('[data-test-subj="globalLoadingIndicator"]').should('not.exist');
431+
372432
cy.get('[data-test-subj="addVisualizationButton"]').first().click();
373433
cy.get('[data-test-subj="superDatePickerApplyTimeButton"]').click();
374-
cy.get('[id="explorerPlotComponent"]').should('exist');
434+
cy.get('[id="explorerPlotComponent"]', { timeout: 30000 }).should('exist');
375435
cy.get('[data-test-subj="searchAutocompleteTextArea"]').click();
376436
cy.get('.aa-List').find('.aa-Item').should('have.length', 11);
377437
cy.get('[data-test-subj="searchAutocompleteTextArea"]').focus();

.cypress/integration/event_analytics_test/event_analytics.spec.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,18 @@ import {
3838
describe('Adding sample data and visualization', () => {
3939
it('Adds sample flights and logs data for event analytics', () => {
4040
cy.visit(`${Cypress.env('opensearchDashboards')}/app/home#/tutorial_directory/sampleData`);
41+
// Wait for page to fully load - first wait for header to exist
42+
cy.get('header[data-test-subj="headerGlobalNav"]', { timeout: 60000 }).should('exist');
43+
cy.get('[data-test-subj="globalLoadingIndicator"]', { timeout: 60000 }).should('not.exist');
44+
4145
cy.get('div[data-test-subj="sampleDataSetCardflights"]')
46+
.should('be.visible')
4247
.contains(/(Add|View) data/)
4348
.click();
4449
cy.visit(`${Cypress.env('opensearchDashboards')}/app/home#/tutorial_directory/sampleData`);
50+
cy.get('[data-test-subj="globalLoadingIndicator"]').should('not.exist');
4551
cy.get('div[data-test-subj="sampleDataSetCardlogs"]')
52+
.should('be.visible')
4653
.contains(/(Add|View) data/)
4754
.click();
4855
});

.cypress/integration/notebooks_test/notebooks.spec.js

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,12 @@ const moveToTestNotebook = () => {
4949
describe('Adding sample data and visualization', () => {
5050
it('Adds sample flights data for visualization paragraph', () => {
5151
cy.visit(`${Cypress.env('opensearchDashboards')}/app/home#/tutorial_directory/sampleData`);
52+
// Wait for page to fully load - first wait for header to exist
53+
cy.get('header[data-test-subj="headerGlobalNav"]', { timeout: 60000 }).should('exist');
54+
cy.get('[data-test-subj="globalLoadingIndicator"]', { timeout: 60000 }).should('not.exist');
55+
5256
cy.get('div[data-test-subj="sampleDataSetCardflights"]')
57+
.should('be.visible')
5358
.contains(/(Add|View) data/)
5459
.click();
5560
});
@@ -371,17 +376,32 @@ describe('Testing paragraphs', () => {
371376

372377
it('Clears outputs', () => {
373378
cy.get('h3[data-test-subj="notebookTitle"]').contains(TEST_NOTEBOOK).should('exist');
379+
380+
// Verify outputs exist before clearing
381+
cy.get(`a[href="${SAMPLE_URL}"]`).should('exist');
382+
374383
cy.get('.euiButton__text').contains('Clear all outputs').click();
375384
cy.get('button[data-test-subj="confirmModalConfirmButton"]').click();
376385

386+
// Wait for the clear operation to complete
387+
cy.get('[data-test-subj="globalLoadingIndicator"]', { timeout: 30000 }).should('not.exist');
388+
389+
// Verify outputs are cleared
377390
cy.get(`a[href="${SAMPLE_URL}"]`).should('not.exist');
378391
});
379392

380393
it('Runs all paragraphs', () => {
381394
cy.get('h3[data-test-subj="notebookTitle"]').contains(TEST_NOTEBOOK).should('exist');
382-
cy.get('.euiButton__text').contains('Run all paragraphs').click();
383395

384-
cy.get(`a[href="${SAMPLE_URL}"]`).should('exist');
396+
// Ensure button is visible and enabled before clicking
397+
cy.contains('button', 'Run all paragraphs').should('be.visible').and('not.be.disabled');
398+
cy.contains('button', 'Run all paragraphs').click();
399+
400+
// Wait for execution to complete
401+
cy.get('[data-test-subj="globalLoadingIndicator"]', { timeout: 60000 }).should('not.exist');
402+
403+
// Wait for outputs to render - check for the specific markdown link
404+
cy.get(`a[href="${SAMPLE_URL}"]`, { timeout: 60000 }).should('exist');
385405
});
386406

387407
it('Adds paragraph to top', () => {
@@ -407,11 +427,24 @@ describe('Testing paragraphs', () => {
407427

408428
it('Moves paragraphs', () => {
409429
cy.get('h3[data-test-subj="notebookTitle"]').contains(TEST_NOTEBOOK).should('exist');
430+
431+
// Clear outputs to reduce payload size and prevent POST 413 errors
432+
cy.get('.euiButton__text').contains('Clear all outputs').click();
433+
cy.get('button[data-test-subj="confirmModalConfirmButton"]').click();
434+
cy.get('[data-test-subj="globalLoadingIndicator"]', { timeout: 30000 }).should('not.exist');
435+
436+
// Scroll to top to ensure first paragraph menu button is in view
437+
cy.scrollTo('top');
438+
cy.get('.euiButtonIcon[aria-label="Open paragraph menu"').eq(0).scrollIntoView({ duration: 500 });
410439
cy.get('.euiButtonIcon[aria-label="Open paragraph menu"').eq(0).click();
411440
cy.get('.euiContextMenuItem-isDisabled').should('have.length.gte', 2);
412441
cy.get('.euiContextMenuItem__text').contains('Move to bottom').click();
413442

414-
cy.get('.euiText').contains('[5] Visualization').should('exist');
443+
// Wait for the loading indicator to disappear after move
444+
cy.get('[data-test-subj="globalLoadingIndicator"]', { timeout: 30000 }).should('not.exist');
445+
446+
// Verify the paragraph has been renumbered
447+
cy.get('.euiText').contains('[5] Visualization', { timeout: 10000 }).should('exist');
415448
});
416449

417450
it('Duplicates and renames the notebook', () => {
@@ -427,7 +460,9 @@ describe('Testing paragraphs', () => {
427460
cy.get('h3[data-test-subj="notebookTitle"]')
428461
.contains(TEST_NOTEBOOK + ' (rename)')
429462
.should('exist');
430-
cy.get(`a[href="${SAMPLE_URL}"]`).should('have.length.gte', 2);
463+
464+
// Verify notebook has paragraphs (outputs were cleared in previous test)
465+
cy.get('.euiText').should('contain', 'Code block');
431466
});
432467

433468
it('Deletes paragraphs', () => {

.cypress/integration/panels_test/panels.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ describe('Panels testing with Sample Data', { defaultCommandTimeout: 10000 }, ()
2121

2222
before(() => {
2323
cy.visit(`${Cypress.env('opensearchDashboards')}/app/home#/tutorial_directory/sampleData`);
24+
// Wait for page to fully load - first wait for header to exist
25+
cy.get('header[data-test-subj="headerGlobalNav"]', { timeout: 60000 }).should('exist');
26+
cy.get('[data-test-subj="globalLoadingIndicator"]', { timeout: 60000 }).should('not.exist');
27+
2428
cy.get('div[data-test-subj="sampleDataSetCardflights"]')
29+
.should('be.visible')
2530
.contains(/(Add|View) data/)
2631
.trigger('mouseover')
2732
.click();

0 commit comments

Comments
 (0)