From 597964033594f93d94cc5dc6714118945fb7ba40 Mon Sep 17 00:00:00 2001 From: Federico Silva Date: Thu, 30 Jan 2025 13:41:47 -0300 Subject: [PATCH] add max recent queries tests Signed-off-by: Federico Silva --- .../max_recent_queries.spec.js | 99 +++++++++++++++++++ .../query_enhancements/max_recent_queries.js | 63 ++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 cypress/integration/core_opensearch_dashboards/opensearch_dashboards/apps/query_enhancements/max_recent_queries.spec.js create mode 100644 cypress/utils/apps/query_enhancements/max_recent_queries.js diff --git a/cypress/integration/core_opensearch_dashboards/opensearch_dashboards/apps/query_enhancements/max_recent_queries.spec.js b/cypress/integration/core_opensearch_dashboards/opensearch_dashboards/apps/query_enhancements/max_recent_queries.spec.js new file mode 100644 index 00000000000..f8668ee7178 --- /dev/null +++ b/cypress/integration/core_opensearch_dashboards/opensearch_dashboards/apps/query_enhancements/max_recent_queries.spec.js @@ -0,0 +1,99 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + DATASOURCE_NAME, + INDEX_PATTERN_WITH_TIME, + INDEX_WITH_TIME_1, +} from '../../../../../utils/apps/constants'; +import { SECONDARY_ENGINE, BASE_PATH } from '../../../../../utils/constants'; +import { NEW_SEARCH_BUTTON } from '../../../../../utils/dashboards/data_explorer/elements.js'; +import { + getRandomizedWorkspaceName, + setDatePickerDatesAndSearchIfRelevant, +} from '../../../../../utils/apps/query_enhancements/shared'; +import { generateMaxQueriesTestConfiguration } from '../../../../../utils/apps/query_enhancements/max_recent_queries'; + +const workspace = getRandomizedWorkspaceName(); + +describe('filter for value spec', { testIsolation: true }, () => { + const index = INDEX_PATTERN_WITH_TIME.replace('*', ''); + beforeEach(() => { + // Load test data + cy.setupTestData( + SECONDARY_ENGINE.url, + ['cypress/fixtures/query_enhancements/data_logs_1/data_logs_small_time_1.mapping.json'], + ['cypress/fixtures/query_enhancements/data_logs_1/data_logs_small_time_1.data.ndjson'] + ); + + // Add data source + cy.addDataSource({ + name: DATASOURCE_NAME, + url: `${SECONDARY_ENGINE.url}`, + authType: 'no_auth', + }); + // Create workspace + cy.deleteWorkspaceByName(workspace); + cy.visit('/app/home'); + cy.osd.createInitialWorkspaceWithDataSource(DATASOURCE_NAME, workspace); + cy.createWorkspaceIndexPatterns({ + workspaceName: workspace, + indexPattern: index, + timefieldName: 'timestamp', + indexPatternHasTimefield: true, + dataSource: DATASOURCE_NAME, + isEnhancement: true, + }); + + cy.navigateToWorkSpaceSpecificPage({ + url: BASE_PATH, + workspaceName: workspace, + page: 'discover', + isEnhancement: true, + }); + cy.getElementByTestId(NEW_SEARCH_BUTTON).click(); + }); + + afterEach(() => { + cy.deleteWorkspaceByName(workspace); + cy.deleteDataSourceByName(DATASOURCE_NAME); + // TODO: Modify deleteIndex to handle an array of index and remove hard code + cy.deleteIndex(INDEX_WITH_TIME_1); + }); + + generateMaxQueriesTestConfiguration().forEach((config) => { + it(`check max queries for ${config.testName}`, () => { + cy.setDataset(config.dataset, DATASOURCE_NAME, config.datasetType); + cy.setQueryLanguage(config.language); + setDatePickerDatesAndSearchIfRelevant(config.language); + const currentBaseQuery = config.baseQuery; + config.testQueries.forEach((query) => { + cy.setQueryEditor(currentBaseQuery + query, {}, true); + }); + cy.getElementByTestId('queryEditorFooterToggleRecentQueriesButton').click({ + force: true, + }); + // only 10 of the 11 queries should be displayed + cy.getElementByTestIdLike('row-').should('have.length', 10); + const reverseList = [...config.testQueries].reverse(); + cy.getElementByTestIdLike('row-').each(($row, rowIndex) => { + expect($row.text()).to.contain(currentBaseQuery + reverseList[rowIndex]); + }); + }); + + it(`check duplicate query for ${config.testName}`, () => { + cy.setDataset(config.dataset, DATASOURCE_NAME, config.datasetType); + cy.setQueryLanguage(config.language); + setDatePickerDatesAndSearchIfRelevant(config.language); + const query = config.baseQuery + 'status_code = 504'; + cy.setQueryEditor(query, {}, true); + cy.setQueryEditor(query, {}, true); + cy.getElementByTestId('queryEditorFooterToggleRecentQueriesButton').click({ + force: true, + }); + cy.contains(query).should('have.length', 1); + }); + }); +}); diff --git a/cypress/utils/apps/query_enhancements/max_recent_queries.js b/cypress/utils/apps/query_enhancements/max_recent_queries.js new file mode 100644 index 00000000000..b9fd0aa5f6a --- /dev/null +++ b/cypress/utils/apps/query_enhancements/max_recent_queries.js @@ -0,0 +1,63 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { INDEX_PATTERN_WITH_TIME, INDEX_WITH_TIME_1, QueryLanguages } from './constants'; + +export const MaxQueriesDataTypes = { + INDEX_PATTERN: { + name: 'INDEX_PATTERN', + supportedLanguages: [QueryLanguages.SQL, QueryLanguages.PPL], + }, + INDEXES: { + name: 'INDEXES', + supportedLanguages: [QueryLanguages.SQL, QueryLanguages.PPL], + }, +}; + +/** + * Test confuguration for max recent queries + * @returns {object[]} + */ +export const generateMaxQueriesTestConfiguration = () => { + return Object.values(MaxQueriesDataTypes).flatMap((dataset) => + dataset.supportedLanguages.map((language) => { + let datasetToUse; + switch (dataset.name) { + case MaxQueriesDataTypes.INDEX_PATTERN.name: + datasetToUse = INDEX_PATTERN_WITH_TIME; + break; + case MaxQueriesDataTypes.INDEXES.name: + datasetToUse = INDEX_WITH_TIME_1; + break; + default: + throw new Error(`Unsupported dataset: ${dataset.name}`); + } + const baseQuery = { + 'OpenSearch SQL': `SELECT * FROM ${datasetToUse} WHERE `, + PPL: `source = ${datasetToUse} | where `, + }; + return { + dataset: datasetToUse, + datasetType: dataset.name, + language: language.name, + baseQuery: baseQuery[language.name], + testQueries: [ + 'bytes_transferred > 0', + 'bytes_transferred < 8000', + 'bytes_transferred > 8000', + 'status_code = 404', + 'status_code = 501', + 'status_code = 503', + 'status_code = 400', + 'status_code = 401', + 'status_code = 403', + 'status_code = 200', + 'event_sequence_number > 10000000', + ], + testName: `${language.name} and ${dataset.name}`, + }; + }) + ); +};