Skip to content

Commit

Permalink
[Cypress][TESTID-147] Add tests for table canvas in discover
Browse files Browse the repository at this point in the history
Issue resolved:
#8947

Signed-off-by: Anan <[email protected]>
  • Loading branch information
ananzh committed Jan 30, 2025
1 parent a50e0c7 commit 4230fef
Show file tree
Hide file tree
Showing 3 changed files with 215 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import {
INDEX_WITH_TIME_1,
INDEX_WITHOUT_TIME_1,
SECONDARY_ENGINE,
} from '../../../../../utils/constants';
import {
getRandomizedWorkspaceName,
getRandomizedDatasourceName,
generateAllTestConfigurations,
generateIndexPatternTestConfigurations,
setDatePickerDatesAndSearchIfRelevant,
} from '../../../../../utils/apps/query_enhancements/shared';
import { QueryLanguages } from '../../../../../utils/apps/query_enhancements/constants';
import { selectFieldFromSidebar } from '../../../../../utils/apps/query_enhancements/sidebar';

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

const generateTableTestConfiguration = (dataset, datasetType, language) => {
const baseConfig = {
dataset,
datasetType,
language: language.name,
testName: `${language.name}-${datasetType}`,
};

return {
...baseConfig,
};
};

export const runTableTests = () => {
describe('discover table tests', () => {
beforeEach(() => {
cy.setupTestData(
SECONDARY_ENGINE.url,
[
`cypress/fixtures/query_enhancements/data_logs_1/${INDEX_WITH_TIME_1}.mapping.json`,
`cypress/fixtures/query_enhancements/data_logs_1/${INDEX_WITHOUT_TIME_1}.mapping.json`,
],
[
`cypress/fixtures/query_enhancements/data_logs_1/${INDEX_WITH_TIME_1}.data.ndjson`,
`cypress/fixtures/query_enhancements/data_logs_1/${INDEX_WITHOUT_TIME_1}.data.ndjson`,
]
);
cy.addDataSource({
name: datasourceName,
url: SECONDARY_ENGINE.url,
authType: 'no_auth',
});
//cy.deleteWorkspaceByName(`${workspaceName}`);
cy.visit('/app/home');
cy.osd.createInitialWorkspaceWithDataSource(datasourceName, workspaceName);
});

afterEach(() => {
cy.deleteWorkspaceByName(`${workspaceName}`);
cy.deleteDataSourceByName(datasourceName);
cy.deleteIndex('data_logs_small_time_1');
cy.window().then((win) => {
win.localStorage.clear();
win.sessionStorage.clear();
});
});

generateAllTestConfigurations(generateTableTestConfiguration, {
indexPattern: 'data_logs_small_time_1*',
index: 'data_logs_small_time_1',
}).forEach((config) => {
describe(`${config.testName}`, () => {
beforeEach(() => {
if (config.datasetType === 'INDEX_PATTERN') {
cy.createWorkspaceIndexPatterns({
workspaceName: workspaceName,
indexPattern: 'data_logs_small_time_1',
timefieldName: 'timestamp',
dataSource: datasourceName,
isEnhancement: true,
});
}
cy.navigateToWorkSpaceSpecificPage({
workspaceName: workspaceName,
page: 'discover',
isEnhancement: true,
});
});

it(`should allow expand multiple documents for ${config.testName}`, () => {
// Setup
cy.setDataset(config.dataset, datasourceName, config.datasetType);
cy.setQueryLanguage(config.language);
setDatePickerDatesAndSearchIfRelevant(config.language);
// expanding a document in the table
cy.get('[data-test-subj="docTableExpandToggleColumn"]')
.find('[type="button"]')
.eq(2)
.click();

// expanding a document in the table
cy.get('[data-test-subj="docTableExpandToggleColumn"]')
.find('[type="button"]')
.eq(3)
.click();

// checking the number of exapnded documents visible on screen
cy.get('[data-test-subj="tableDocViewRow-_index"]').should('have.length', 2);

// switch query should keep expanded state
// TODO: allow switch to other languages
if (config.language === QueryLanguages.DQL.name) {
cy.setQueryLanguage('Lucene');
} else if (config.language === QueryLanguages.Lucene.name) {
cy.setQueryLanguage('DQL');
} else if (config.language === QueryLanguages.SQL.name) {
cy.setQueryLanguage('PPL');
} else {
cy.setQueryLanguage('OpenSearch SQL');
}
cy.get('[data-test-subj="tableDocViewRow-_index"]').should('have.length', 2);
});
});
});

generateIndexPatternTestConfigurations(generateTableTestConfiguration, {
indexPattern: 'data_logs_small_no_time_1*',
supportedLanguages: [QueryLanguages.DQL, QueryLanguages.Lucene],
}).forEach((config) => {
describe(`${config.testName}`, () => {
beforeEach(() => {
if (config.datasetType === 'INDEX_PATTERN') {
cy.createWorkspaceIndexPatterns({
workspaceName: workspaceName,
indexPattern: 'data_logs_small_no_time_1',
timefieldName: '',
indexPatternHasTimefield: false,
dataSource: datasourceName,
isEnhancement: true,
});
}
cy.navigateToWorkSpaceSpecificPage({
workspaceName: workspaceName,
page: 'discover',
isEnhancement: true,
});
});
// TODO: Currently sort is not applicable for nested field. Should include and test nested field if sort can support.
const testFields = ['category', 'response_time'];

it(`sort for ${config.testName}`, () => {
// Setup
cy.setDataset(config.dataset, datasourceName, config.datasetType);
cy.setQueryLanguage(config.language);
// Add fields
testFields.forEach((field) => {
selectFieldFromSidebar(field);
// Default is no sort
cy.getElementByTestId(`docTableHeaderFieldSort_${field}`).should(
'have.attr',
'aria-label',
`Sort ${field} ascending`
);
});
// Sort asc
cy.getElementByTestId(`docTableHeaderFieldSort_${testFields[0]}`).should('exist').click();
cy.getElementByTestId('osdDocTableCellDataField')
.eq(0)
.should('have.text', 'Application');
// Sort desc
cy.getElementByTestId(`docTableHeaderFieldSort_${testFields[0]}`).should('exist').click();
cy.getElementByTestId('osdDocTableCellDataField').eq(0).should('have.text', 'Security');
// Sort asc on the 2nd col
cy.getElementByTestId(`docTableHeaderFieldSort_${testFields[1]}`).should('exist').click();
cy.getElementByTestId('osdDocTableCellDataField').eq(1).should('have.text', '0.1');
// Sort desc on the 2nd col
cy.getElementByTestId(`docTableHeaderFieldSort_${testFields[1]}`).should('exist').click();
cy.getElementByTestId('osdDocTableCellDataField').eq(1).should('have.text', '5');
});
});
});
});
};

runTableTests();
26 changes: 26 additions & 0 deletions cypress/utils/apps/query_enhancements/shared.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,32 @@ export const generateAllTestConfigurations = (generateTestConfigurationCallback,
);
};

/**
* Returns an array of test configurations for every query language + index pattern permutation
* @param {GenerateTestConfigurationCallback} generateTestConfigurationCallback - cb function that generates a test case for the particular permutation
* @param {Object} [options] - Optional configuration options
* @param {string} [options.indexPattern] - Custom index pattern name (defaults to INDEX_PATTERN_WITH_TIME)
* @param {string} [options.supportedLanguages] - Custom supported languages (defaults to all four supported languages)
* @returns {object[]}
*/
export const generateIndexPatternTestConfigurations = (
generateTestConfigurationCallback,
options = {}
) => {
const {
indexPattern = INDEX_PATTERN_WITH_TIME,
supportedLanguages = DatasetTypes.INDEX_PATTERN.supportedLanguages,
} = options;
const indexPatternDatasets = Object.values(DatasetTypes).filter(
(dataset) => dataset.name === DatasetTypes.INDEX_PATTERN.name
);
return indexPatternDatasets.flatMap((dataset) =>
supportedLanguages.map((language) => {
return generateTestConfigurationCallback(indexPattern, dataset.name, language);
})
);
};

/**
* Sets the top nav date if it is relevant for the passed language
* @param {QueryEnhancementLanguage} language - query language
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@
"release_note:generate": "scripts/use_node scripts/generate_release_note",
"cypress:run-without-security": "env TZ=America/Los_Angeles NO_COLOR=1 cypress run --env SECURITY_ENABLED=false",
"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: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,$BASE_PATH/table.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\"",
"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",
Expand Down

0 comments on commit 4230fef

Please sign in to comment.