Skip to content

Commit

Permalink
TESTID-116, TESTID-115, TESTID-61 - Tests for Saved Searches in Dashb…
Browse files Browse the repository at this point in the history
…oard (#9288)

* add tests for saved searches in dashboard: TESTID-116, TESTID-115, TESTID-61

Signed-off-by: Justin Kim <[email protected]>

* Changeset file for PR #9288 created/updated

* update test case to change date to where we have some results

Signed-off-by: Justin Kim <[email protected]>

* add to ci group 12

Signed-off-by: Justin Kim <[email protected]>

---------

Signed-off-by: Justin Kim <[email protected]>
Co-authored-by: opensearch-changeset-bot[bot] <154024398+opensearch-changeset-bot[bot]@users.noreply.github.com>
  • Loading branch information
angle943 and opensearch-changeset-bot[bot] authored Jan 30, 2025
1 parent a50e0c7 commit 85e2187
Show file tree
Hide file tree
Showing 4 changed files with 189 additions and 1 deletion.
2 changes: 2 additions & 0 deletions changelogs/fragments/9288.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
test:
- Add tests for saved searches in dashboards ([#9288](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/9288))
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import {
DatasetTypes,
INDEX_PATTERN_WITH_TIME,
INDEX_WITH_TIME_1,
INDEX_WITH_TIME_2,
QueryLanguages,
SECONDARY_ENGINE,
START_TIME,
} from '../../../../../utils/constants';
import {
getRandomizedWorkspaceName,
getRandomizedDatasourceName,
setDatePickerDatesAndSearchIfRelevant,
} from '../../../../../utils/apps/query_enhancements/shared';
import {
postRequestSaveSearch,
generateSavedTestConfiguration,
getExpectedHitCount,
loadSavedSearchFromDashboards,
navigateToDashboardAndOpenSavedSearchPanel,
} from '../../../../../utils/apps/query_enhancements/saved';

const workspaceName = getRandomizedWorkspaceName();
const datasourceName = getRandomizedDatasourceName();

export const runSavedSearchTests = () => {
describe('saved search in dashboards', () => {
beforeEach(() => {
// Load test data
cy.setupTestData(
SECONDARY_ENGINE.url,
[
`cypress/fixtures/query_enhancements/data_logs_1/${INDEX_WITH_TIME_1}.mapping.json`,
`cypress/fixtures/query_enhancements/data_logs_2/${INDEX_WITH_TIME_2}.mapping.json`,
],
[
`cypress/fixtures/query_enhancements/data_logs_1/${INDEX_WITH_TIME_1}.data.ndjson`,
`cypress/fixtures/query_enhancements/data_logs_2/${INDEX_WITH_TIME_2}.data.ndjson`,
]
);
// Add data source
cy.addDataSource({
name: datasourceName,
url: SECONDARY_ENGINE.url,
authType: 'no_auth',
});

// Create workspace
cy.deleteWorkspaceByName(workspaceName);
cy.visit('/app/home');
cy.osd.createInitialWorkspaceWithDataSource(datasourceName, workspaceName);
cy.createWorkspaceIndexPatterns({
workspaceName: workspaceName,
indexPattern: INDEX_PATTERN_WITH_TIME.replace('*', ''),
timefieldName: 'timestamp',
dataSource: datasourceName,
isEnhancement: true,
});
});

afterEach(() => {
cy.deleteWorkspaceByName(workspaceName);
// // TODO: Modify deleteIndex to handle an array of index and remove hard code
cy.deleteDataSourceByName(datasourceName);
cy.deleteIndex(INDEX_WITH_TIME_1);
cy.deleteIndex(INDEX_WITH_TIME_2);
});

it('Load a saved search', () => {
const config = generateSavedTestConfiguration(
INDEX_PATTERN_WITH_TIME,
DatasetTypes.INDEX_PATTERN.name,
QueryLanguages.DQL
);
// using a POST request to create a saved search to load
postRequestSaveSearch(config);

loadSavedSearchFromDashboards(config, workspaceName);

// verify that there are results
cy.getElementByTestId('docTableField').should('be.visible');

const expectedHitCount = getExpectedHitCount(config.datasetType, config.language);
cy.getElementByTestId('osdDocTablePagination').contains(new RegExp(`of ${expectedHitCount}`));
// verify that the proper fields are loaded as well as sorting is working as expected
config.sampleTableData.forEach(([index, value]) => {
cy.getElementByTestId('osdDocTableCellDataField').eq(index).contains(value);
});
});

it('Changing the time range updates the saved search elements in dashboards', () => {
const config = generateSavedTestConfiguration(
INDEX_PATTERN_WITH_TIME,
DatasetTypes.INDEX_PATTERN.name,
QueryLanguages.DQL
);
// using a POST request to create a saved search to load
postRequestSaveSearch(config);

loadSavedSearchFromDashboards(config, workspaceName);

// verify that there are results
const expectedHitCount = getExpectedHitCount(config.datasetType, config.language);
cy.getElementByTestId('osdDocTablePagination').contains(new RegExp(`of ${expectedHitCount}`));

// set a date where there should different number of results
setDatePickerDatesAndSearchIfRelevant(
config.language,
START_TIME,
'Oct 1, 2022 @ 00:00:00.000'
);
cy.getElementByTestId('osdDocTablePagination').contains(/of 15/);
});

it('Show valid saved searches', () => {
const dqlConfig = generateSavedTestConfiguration(
INDEX_PATTERN_WITH_TIME,
DatasetTypes.INDEX_PATTERN.name,
QueryLanguages.DQL
);
const luceneConfig = generateSavedTestConfiguration(
INDEX_PATTERN_WITH_TIME,
DatasetTypes.INDEX_PATTERN.name,
QueryLanguages.Lucene
);
const sqlConfig = generateSavedTestConfiguration(
INDEX_PATTERN_WITH_TIME,
DatasetTypes.INDEX_PATTERN.name,
QueryLanguages.SQL
);
const pplConfig = generateSavedTestConfiguration(
INDEX_PATTERN_WITH_TIME,
DatasetTypes.INDEX_PATTERN.name,
QueryLanguages.PPL
);
// using a POST request to create a saved search to load
postRequestSaveSearch(dqlConfig);
postRequestSaveSearch(luceneConfig);
postRequestSaveSearch(sqlConfig);
postRequestSaveSearch(pplConfig);

navigateToDashboardAndOpenSavedSearchPanel(workspaceName);
cy.getElementByTestId(`savedObjectTitle${dqlConfig.saveName}`).should('exist');
cy.getElementByTestId(`savedObjectTitle${luceneConfig.saveName}`).should('exist');
cy.getElementByTestId(`savedObjectTitle${sqlConfig.saveName}`).should('not.exist');
cy.getElementByTestId(`savedObjectTitle${pplConfig.saveName}`).should('not.exist');
});
});
};

runSavedSearchTests();
30 changes: 30 additions & 0 deletions cypress/utils/apps/query_enhancements/saved.js
Original file line number Diff line number Diff line change
Expand Up @@ -500,3 +500,33 @@ export const updateSavedSearchAndSaveAndVerify = (
setDatePickerDatesAndSearchIfRelevant(newConfig.language);
verifyDiscoverPageState(newConfig);
};

/**
* Navigates to dashboard page, clicks new dashboard, and open up the saved search panel
* @param {string} workspaceName - name of workspace
*/
export const navigateToDashboardAndOpenSavedSearchPanel = (workspaceName) => {
cy.navigateToWorkSpaceSpecificPage({
workspaceName,
page: 'dashboards',
isEnhancement: true,
});
cy.getElementByTestId('newItemButton').click();
// using DQL as it supports date picker
setDatePickerDatesAndSearchIfRelevant(QueryLanguages.DQL.name);
cy.getElementByTestId('dashboardAddPanelButton').click();
cy.getElementByTestId('savedObjectFinderFilterButton').click();
cy.getElementByTestId('savedObjectFinderFilter-search').click();
};

/**
* Navigates to dashboard page and loads a saved search as a new dashboard
* @param {SavedTestConfig} config - the relevant config for the test case
* @param {string} workspaceName - name of workspace
*/
export const loadSavedSearchFromDashboards = (config, workspaceName) => {
navigateToDashboardAndOpenSavedSearchPanel(workspaceName);
cy.getElementByTestId(`savedObjectTitle${config.saveName}`).click();
cy.getElementByTestId('addObjectToContainerSuccess').should('be.visible');
cy.getElementByTestId('euiFlyoutCloseButton').click();
};
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
"cypress:run-with-security": "env TZ=America/Los_Angeles NO_COLOR=1 cypress run --env SECURITY_ENABLED=true,openSearchUrl=https://localhost:9200,WAIT_FOR_LOADER_BUFFER_MS=500",
"osd:ciGroup10": "BASE_PATH='cypress/integration/core_opensearch_dashboards/opensearch_dashboards/apps/query_enhancements' && echo \"$BASE_PATH/saved_search.spec.js,$BASE_PATH/queries.spec.js,$BASE_PATH/a_check.spec.js,$BASE_PATH/dataset_selector.spec.js,$BASE_PATH/s3_dataset.spec.js,$BASE_PATH/simple_dataset_selector.spec.js,$BASE_PATH/sidebar.spec.js,$BASE_PATH/shared_links.spec.js\"",
"osd:ciGroup11": "echo \"cypress/integration/dashboard_sanity_test.spec.ts\"",
"osd:ciGroup12": "BASE_PATH='cypress/integration/core_opensearch_dashboards/opensearch_dashboards/apps/query_enhancements' && echo \"$BASE_PATH/time_range_selection.spec.js,$BASE_PATH/saved_queries.spec.js,$BASE_PATH/language_specific_display.spec.js,$BASE_PATH/field_display_filtering.spec.js\"",
"osd:ciGroup12": "BASE_PATH='cypress/integration/core_opensearch_dashboards/opensearch_dashboards/apps/query_enhancements' && echo \"$BASE_PATH/time_range_selection.spec.js,$BASE_PATH/saved_queries.spec.js,$BASE_PATH/language_specific_display.spec.js,$BASE_PATH/field_display_filtering.spec.js,$BASE_PATH/saved_search_in_dashboards.spec.js\"",
"generate:opensearchsqlantlr": "./node_modules/antlr4ng-cli/index.js -Dlanguage=TypeScript -o ./src/plugins/data/public/antlr/opensearch_sql/.generated -visitor -no-listener -Xexact-output-dir ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4",
"generate:opensearchpplantlr": "./node_modules/antlr4ng-cli/index.js -Dlanguage=TypeScript -o ./src/plugins/data/public/antlr/opensearch_ppl/.generated -visitor -no-listener -Xexact-output-dir ./src/plugins/data/public/antlr/opensearch_ppl/grammar/OpenSearchPPLLexer.g4 ./src/plugins/data/public/antlr/opensearch_ppl/grammar/OpenSearchPPLParser.g4"
},
Expand Down

0 comments on commit 85e2187

Please sign in to comment.