512 lines
20 KiB
TypeScript
512 lines
20 KiB
TypeScript
export default class advancedAnalyticsPage {
|
|
createWorkbook = (workbookName: string, dataSourceName: string, workbookDescription?: string | undefined): void => {
|
|
cy.visit('/');
|
|
cy.findByText('Add Workbook').click({ force: true });
|
|
cy.get('#name').type(workbookName);
|
|
cy.get('#description').type(workbookDescription);
|
|
cy.get('#defaultDataSourceId').click();
|
|
cy.findByText(dataSourceName).click();
|
|
cy.findByText('Save').click();
|
|
cy.wait(2000);
|
|
};
|
|
|
|
addDashboard = (): void => {
|
|
cy.findByText('Add').click();
|
|
cy.findByText('Dashboard').click();
|
|
};
|
|
|
|
addDashboardWidget = (
|
|
widgetType: string,
|
|
widgetSubtype: string,
|
|
rowValues: { dimensionGroup: string; dimensionName: string }[],
|
|
valuesValues: { measureGroup: string; mesureName: string }[],
|
|
filters?: { dimensionsOrMeasures: string; filterAttributeGroup: string; filterAttributeName: string; filterAttributeValue: string }[] | undefined
|
|
): void => {
|
|
this.addVisualizationWidget();
|
|
this.setWidgetType(widgetType, widgetSubtype);
|
|
|
|
rowValues.forEach((rowValue) => {
|
|
this.dragAndDropArea(rowValue.dimensionGroup, rowValue.dimensionName, 'Categories');
|
|
});
|
|
valuesValues.forEach((valuesValue) => {
|
|
this.dragAndDropArea(valuesValue.measureGroup, valuesValue.mesureName, 'Values');
|
|
});
|
|
|
|
//Commented out because of JAZZ-58105
|
|
//if (filters !== undefined) {
|
|
// filters.forEach((filter) => {
|
|
// this.addwidgetFilter(filter.filterAttributeGroup, filter.filterAttributeName, filter.filterAttributeValue);
|
|
// });
|
|
//}
|
|
|
|
cy.get('.ant-modal-content').findByText('Save').click();
|
|
};
|
|
|
|
saveWidget = () => {
|
|
cy.get('.ant-modal-content').findByText('Save').click();
|
|
};
|
|
|
|
setWidgetType = (widgetType: string, widgetSubType: string) => {
|
|
cy.findByText('Visualization Type').parent().next().click();
|
|
cy.get('.ant-select-item-option-content').contains(widgetType).click();
|
|
cy.findByText('Visualization Type').parent().next().next().click();
|
|
cy.findAllByRole('listbox').last().next().findByText(widgetSubType).click();
|
|
};
|
|
|
|
addVisualizationWidget = (): void => {
|
|
cy.findByText('Add Widget').click();
|
|
cy.findByText('Add Visual').click();
|
|
cy.findByTitle('Dimensions').parent().find('.ant-tree-switcher.ant-tree-switcher_open', { timeout: 10000 }).should('exist');
|
|
};
|
|
|
|
addDataAnlysisSheet = (): void => {
|
|
cy.findByText('Add').click();
|
|
cy.findByText('Data Sheet').click();
|
|
cy.findByTitle('Dimensions').parent().find('.ant-tree-switcher.ant-tree-switcher_open', { timeout: 10000 }).should('exist');
|
|
};
|
|
|
|
addAttributesToWidget = (attributes: { attributeGroup: string; attributeName: string; sectionName: string; attributeDestination: string }[]): void => {
|
|
attributes.forEach((attribute) => {
|
|
this.addAttributeToWidget(attribute.attributeGroup, attribute.attributeName, attribute.sectionName, attribute.attributeDestination);
|
|
});
|
|
};
|
|
|
|
addAttributeToWidget = (attributeGroup: string, attributeName: string, attributeSection: string, attributeDestination: string): void => {
|
|
this.dragAndDropArea(attributeGroup, attributeName, attributeDestination);
|
|
};
|
|
|
|
addDashboardWidgetWithPivots = (
|
|
widgetType: string,
|
|
rowValues: { dimensionGroup: string; dimensionName: string }[],
|
|
valuesValues: { measureGroup: string; mesureName: string }[],
|
|
pivotValues: { pivoteGroup: string; pivotName: string }[],
|
|
filters?: { filterAttributeGroup: string; filterAttributeName: string; filterAttributeValue: string }[] | undefined
|
|
): void => {
|
|
this.addVisualizationWidget();
|
|
|
|
rowValues.forEach((rowValue) => {
|
|
this.dragAndDropArea(rowValue.dimensionGroup, rowValue.dimensionName, 'Categories');
|
|
});
|
|
valuesValues.forEach((valuesValue) => {
|
|
this.dragAndDropArea(valuesValue.measureGroup, valuesValue.mesureName, 'Values');
|
|
});
|
|
pivotValues.forEach((pivotValue) => {
|
|
this.dragAndDropArea(pivotValue.pivoteGroup, pivotValue.pivotName, 'Break By');
|
|
});
|
|
if (filters !== undefined) {
|
|
filters.forEach((filter) => {
|
|
this.addwidgetFilter(filter.filterAttributeGroup, filter.filterAttributeName, filter.filterAttributeValue);
|
|
});
|
|
}
|
|
|
|
cy.findByText('Save').click();
|
|
};
|
|
|
|
expandNode = (nodeName: string, openOrClose: string): void => {
|
|
cy.findByTitle(nodeName)
|
|
.invoke('attr', 'class')
|
|
.then((classVal) => {
|
|
if (classVal.includes('ant-tree-node-content-wrapper-close') && openOrClose === 'open') {
|
|
cy.findByTitle(nodeName).siblings().last().click();
|
|
}
|
|
if (classVal.includes('ant-tree-node-content-wrapper-open') && openOrClose === 'close') {
|
|
cy.findByTitle(nodeName).siblings().last().click();
|
|
}
|
|
});
|
|
cy.wait(500);
|
|
};
|
|
|
|
addDataAnalysis = (
|
|
rowValues: { dimensionGroup: string; dimensionName: string }[],
|
|
valuesValues: { measureGroup: string; mesureName: string }[],
|
|
filters?: { dimensionsOrMeasures: string; filterAttributeGroup: string; filterAttributeName: string; filterAttributeValue: string }[] | undefined
|
|
): void => {
|
|
this.addDataAnlysisSheet();
|
|
rowValues.forEach((rowValue) => {
|
|
this.dragAndDropArea(rowValue.dimensionGroup, rowValue.dimensionName, 'Rows');
|
|
});
|
|
valuesValues.forEach((valuesValue) => {
|
|
this.dragAndDropArea(valuesValue.measureGroup, valuesValue.mesureName, 'Columns');
|
|
});
|
|
if (filters === undefined) return;
|
|
filters.forEach((filter) => {
|
|
this.addwidgetFilter(filter.filterAttributeGroup, filter.filterAttributeName);
|
|
});
|
|
};
|
|
|
|
dragAndDropArea = (dimensionGroup: string, dimensionName: string, areaToDrop: string, whichSection = 0): void => {
|
|
const dataTransfer = new DataTransfer();
|
|
this.searchForAttribute(dimensionName);
|
|
this.expandNode(dimensionGroup, 'open');
|
|
cy.get(`span[title="${dimensionGroup}"]`).parent().next().findByText(dimensionName).trigger('dragstart', {
|
|
dataTransfer
|
|
});
|
|
|
|
cy.findAllByText(areaToDrop).then((elm) => {
|
|
const elementLength = elm.length;
|
|
|
|
if (elementLength === 1) {
|
|
whichSection = 0;
|
|
cy.log(`There were not multiple ${areaToDrop} sections, defaulting to 0`);
|
|
cy.findAllByText(areaToDrop).eq(0).parentsUntil('.fields').last().next().trigger('drop', {
|
|
dataTransfer
|
|
});
|
|
} else {
|
|
cy.findAllByText(areaToDrop).eq(whichSection).parentsUntil('.fields').last().next().trigger('drop', {
|
|
dataTransfer
|
|
});
|
|
}
|
|
});
|
|
|
|
this.clearSearch();
|
|
};
|
|
|
|
dragAndDropAreaToPosition = (dimensionGroup: string, dimensionName: string, areaToDrop: string, positionNumber: number, whichSection = 0): void => {
|
|
const dataTransfer = new DataTransfer();
|
|
this.searchForAttribute(dimensionName);
|
|
this.expandNode(dimensionGroup, 'open');
|
|
cy.get(`span[title="${dimensionGroup}"]`).parent().next().findByText(dimensionName).trigger('dragstart', {
|
|
dataTransfer
|
|
});
|
|
|
|
cy.findAllByText(areaToDrop).then((elm) => {
|
|
const numberOfSections = elm.length;
|
|
cy.log(`Number of elements is ${numberOfSections}`);
|
|
|
|
if (numberOfSections === 1) {
|
|
whichSection = 0;
|
|
cy.log(`There were not multiple ${areaToDrop} sections, defaulting to 0`);
|
|
cy.findAllByText(areaToDrop).eq(0).parentsUntil('.fields').last().next().find(`#div-dropzone-${positionNumber}`).trigger('drop', {
|
|
dataTransfer
|
|
});
|
|
} else {
|
|
cy.findAllByText(areaToDrop).eq(whichSection).parentsUntil('.fields').last().next().find(`#div-dropzone-${positionNumber}`).trigger('drop', {
|
|
dataTransfer
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
addwidgetFilter = (dimensionGroup: string, dimensionName: string, filterValue?: string | null): void => {
|
|
const dataTransfer = new DataTransfer();
|
|
this.searchForAttribute(dimensionName);
|
|
this.expandNode(dimensionGroup, 'open');
|
|
cy.get(`span[title="${dimensionGroup}"]`).parent().next().findByText(dimensionName).trigger('dragstart', {
|
|
dataTransfer
|
|
});
|
|
|
|
cy.get('.filters-bar').findByText('Filters').parent().parent().parent().next().trigger('drop', {
|
|
dataTransfer
|
|
});
|
|
|
|
if (filterValue != null) {
|
|
cy.findByText(filterValue).click();
|
|
}
|
|
|
|
cy.findByText('Apply').click();
|
|
};
|
|
|
|
addCalculationFilter = (filterAttributeGroup: string, filterAttribute: string): void => {
|
|
cy.findByText('Add Filter').click();
|
|
cy.get('.ant-modal-content').find('input').type(filterAttribute);
|
|
cy.findByTitle(filterAttributeGroup).parent().next().findByTitle(filterAttribute).click();
|
|
cy.get('.ant-modal-content').findByText('Apply').click();
|
|
cy.findByText('Filter').should('not.exist');
|
|
};
|
|
|
|
searchForAttribute = (attributeName: string): void => {
|
|
cy.get('input[name="Search"]').clear().type(attributeName).wait(500);
|
|
};
|
|
|
|
setFilterValue = (filterAttribute: string, filterValue: string): void => {
|
|
cy.wait(1);
|
|
this.openEditFilter(filterAttribute);
|
|
cy.findByText('List').click();
|
|
cy.get('.tempo-action-bar__filters').find('input[inputmode="text"]').clear().type(filterValue).wait(1000);
|
|
cy.findByText(filterValue).click();
|
|
cy.findByText('Apply').click();
|
|
};
|
|
|
|
openEditFilter = (filter: string): void => {
|
|
cy.get('.filters-bar').findByText(`${filter}:`).click();
|
|
};
|
|
|
|
openEditWidget = (widgetName: string): void => {
|
|
cy.findByText(widgetName)
|
|
.parent()
|
|
.parent()
|
|
.parent()
|
|
.parent()
|
|
.then((widget) => {
|
|
cy.wrap(widget).trigger('mouseover');
|
|
cy.wrap(widget).find('span[aria-label="edit"]').click();
|
|
});
|
|
};
|
|
|
|
selectWorkbookFromTable = (workbookName: string): void => {
|
|
cy.get('main').findByText(workbookName).click();
|
|
};
|
|
|
|
selectWorkbookFromPane = (workbookName: string): void => {
|
|
cy.get('.ant-menu-item-group').findByText(workbookName).parent().click();
|
|
};
|
|
|
|
deleteAttributesFromWidget = (attributes: { attributeName: string; sectionName: string }[]): void => {
|
|
attributes.forEach((attribute) => {
|
|
this.deleteAttributeFromWidget(attribute.attributeName, attribute.sectionName);
|
|
});
|
|
};
|
|
|
|
deleteAttributeFromWidget = (attributeName: string, sectionName: string): void => {
|
|
if (sectionName === 'Values' || sectionName === 'Columns') {
|
|
this.deleteAttributeFromValues(attributeName, sectionName);
|
|
} else {
|
|
cy.get('.designer').findByText(sectionName).parentsUntil('.fields').last().next().findByText(attributeName).next().find('span[aria-label="delete"]').click();
|
|
}
|
|
};
|
|
|
|
deleteAttributeFromValues = (attributeName: string, sectionName: string): void => {
|
|
cy.get('.designer').findByText(sectionName).parentsUntil('.fields').last().next().findByText(attributeName).next().click();
|
|
cy.findByText('Delete').click();
|
|
};
|
|
|
|
deleteWorkbookFromWorkbook = (workbookName: string): void => {
|
|
cy.goToWorkbook(workbookName);
|
|
this.openWorkbookKabob(workbookName);
|
|
cy.findByText('Delete').click().wait(1000);
|
|
cy.get('.ant-modal-confirm-btns').findByText('Delete Workbook').click();
|
|
cy.findByText('Delete Workbook').should('not.exist');
|
|
};
|
|
|
|
deleteWorkbookFromTable = (workbookName: string): void => {
|
|
cy.visit('/');
|
|
cy.get('.p-datatable-tbody').findByText(workbookName).parent().parent().parent().find('span[class$="anticon-delete"]').click();
|
|
cy.get('.ant-modal-confirm-btns').findByText('Delete Workbook').click();
|
|
cy.findByText('Delete Workbook').should('not.exist');
|
|
};
|
|
|
|
deleteDashboard = (dashboardName: string): void => {
|
|
cy.get('.worksheet-tab__title').contains(dashboardName).next().click();
|
|
cy.findByText('Delete').click();
|
|
cy.findByText(`Delete ${dashboardName}`).should('exist');
|
|
cy.findByText('Cancel').parent().next().click();
|
|
cy.findByText(`Delete ${dashboardName}`).should('not.exist');
|
|
};
|
|
|
|
clearSearch = (): void => {
|
|
cy.get('input[name="Search"]').next().click();
|
|
};
|
|
|
|
editTextWidget = (): void => {
|
|
cy.get('.text-widget--richtext').trigger('mouseover');
|
|
cy.get('.ql-snow').parent().prev().find('span[class$="anticon-edit"]').click();
|
|
};
|
|
|
|
addDataSource = (dataSourceName: string, dataSourceDescription?: string | undefined): void => {
|
|
this.goToDataSources();
|
|
cy.findByText('Add Data Source').click();
|
|
cy.get('#name').type(dataSourceName);
|
|
cy.get('#description').type(dataSourceDescription);
|
|
cy.findByText('Apply').click();
|
|
};
|
|
|
|
goToDataSources = (): void => {
|
|
cy.visit('/datasources');
|
|
};
|
|
|
|
shareWorkbook = (workbookName: string, userName: string): void => {
|
|
cy.goToWorkbook(workbookName);
|
|
this.openWorkbookKabob(workbookName);
|
|
cy.findByText('Share').click();
|
|
cy.findByText('Add User').click();
|
|
cy.findByText('Users').parentsUntil('.ant-drawer-body').last().find('.ant-tabs-content-holder').find('input[type="text"]').type(userName);
|
|
cy.get('span').contains(userName).click();
|
|
cy.get('.ant-drawer-title').contains('Add User').parent().siblings().last().findByText('Add').click();
|
|
cy.wait(2000);
|
|
cy.findByText('Save').click();
|
|
cy.wait(2000);
|
|
};
|
|
|
|
openWorkbookKabobOneButton = (workbookName: string): void => {
|
|
cy.get('.ant-layout-content').findByText(workbookName).parentsUntil('.tempo-header').last().next().find('button').click();
|
|
};
|
|
|
|
openWorkbookKabob = (workbookName: string): void => {
|
|
cy.get('.ant-layout-content').findByText(workbookName).parentsUntil('.tempo-header').last().next().findByText('Present').parentsUntil('.tempo-spacing.tempo-spacing--row').last().next().click();
|
|
};
|
|
|
|
setRoleOfWorkbookSharedUser = (workbookName: string, userName: string, viewerOrEditor: string): void => {
|
|
cy.goToWorkbook(workbookName);
|
|
this.openWorkbookKabob(workbookName);
|
|
cy.findByText('Share').click();
|
|
cy.get('div').contains(userName).parent().next().click();
|
|
cy.get('.ant-select-item-option-content').contains(viewerOrEditor).click();
|
|
cy.findByText('Save').click();
|
|
cy.wait(2000);
|
|
};
|
|
|
|
switchDataSource = (newDataSourceName: string): void => {
|
|
cy.get('.designer__datasource-tree-selector').prev().find('button').click();
|
|
cy.findByTitle('Data Source').parent().next().find('.ant-form-item-control-input').click();
|
|
cy.findByText(newDataSourceName).click();
|
|
cy.wait(2000);
|
|
cy.findByText('Change Data Source').parentsUntil('.ant-modal-content').last().parent().findByText('Save').click();
|
|
//cy.get('.ant-modal-content').findByText('Save').click({ force: true });
|
|
};
|
|
|
|
addDashboardFilter = (filterGroup: string, filterMember: string, dataSourceName?: string | undefined): void => {
|
|
cy.findByText('Add Filter').click();
|
|
cy.findByTitle('Dimensions').parent().find('.ant-tree-switcher.ant-tree-switcher_open', { timeout: 10000 }).should('exist');
|
|
this.searchForAttribute(filterMember);
|
|
cy.findByTitle(filterGroup).parent().next().findByTitle(filterMember).click();
|
|
|
|
if (dataSourceName !== undefined) {
|
|
this.setCurrentDashboardFilterDataSource(dataSourceName);
|
|
}
|
|
|
|
cy.get('.ant-popover-content').findByText('Add').click();
|
|
};
|
|
|
|
setDashboardFilterDataSource = (filterName: string, newDataSourceName: string): void => {
|
|
cy.findByText(`${filterName}:`).click();
|
|
this.setCurrentDashboardFilterDataSource(newDataSourceName);
|
|
};
|
|
|
|
setCurrentDashboardFilterDataSource = (newDataSourceName: string): void => {
|
|
cy.findByText('Data Source').parent().next().click();
|
|
cy.findByText(newDataSourceName).scrollIntoView().click();
|
|
};
|
|
|
|
editFilterName = (filterName: string, newFilterName: string): void => {
|
|
cy.findByText(`${filterName}:`).click();
|
|
cy.findByText('Configure').click();
|
|
cy.get('#name').clear().type(newFilterName);
|
|
cy.findByText('Apply').click();
|
|
};
|
|
|
|
setDashboardFilter = (filterName: string, filterValue: string): void => {
|
|
this.openDashboardFilter(filterName);
|
|
cy.get('.tempo-action-bar__filters').find('input[inputmode="text"]').clear().type(filterValue).wait(1000);
|
|
cy.findByText(filterValue).click();
|
|
cy.findByText('Apply').click();
|
|
};
|
|
|
|
openDashboardFilter = (filterName: string): void => {
|
|
cy.get('.filters-bar__item').findByText(`${filterName}:`).click();
|
|
cy.findByText('Conditions').should('exist');
|
|
};
|
|
|
|
duplicateValue = (valueToDuplicate: string, duplicatedValueName: string): void => {
|
|
cy.get('.sortable-list-item__content').contains(valueToDuplicate).next().click();
|
|
cy.findByText('Duplicate').should('exist').click();
|
|
|
|
cy.get('#name', { timeout: 5000 }).should('exist');
|
|
cy.get('#name').clear().type(duplicatedValueName).wait(1000);
|
|
cy.findByText('Apply').click();
|
|
cy.get('#name', { timeout: 5000 }).should('not.exist');
|
|
};
|
|
|
|
editValue = (valueToUpdate: string, updateName?: string, updateFormula?: string, updateCalculation?: string): void => {
|
|
this.openCalculatedValue(valueToUpdate);
|
|
this.editCurrentCalculatedValue(updateName, updateFormula, updateCalculation);
|
|
|
|
cy.findByText('Apply').click({ force: true });
|
|
cy.findByText('Apply').should('not.exist');
|
|
};
|
|
|
|
openCalculatedValue = (valueToUpdate: string): void => {
|
|
cy.get('.sortable-list-item__content').contains(valueToUpdate).next().click();
|
|
cy.findByText('Edit').click();
|
|
cy.get('h3', { timeout: 5000 }).contains(valueToUpdate).should('exist');
|
|
};
|
|
|
|
editCurrentCalculatedValue = (calcValName?: string, calcValFormula?: string, calcValCalculation?: string): void => {
|
|
if (calcValName !== null) {
|
|
cy.get('#name').clear().type(calcValName).wait(1000);
|
|
}
|
|
|
|
if (calcValFormula !== null) {
|
|
cy.findByText('Format').parent().next().click();
|
|
cy.findByText(calcValFormula).click();
|
|
}
|
|
|
|
if (calcValCalculation !== null) {
|
|
cy.get('.calculated-value-editor').find('textarea').clear({ force: true }).type(calcValCalculation, { force: true }).wait(1000);
|
|
}
|
|
};
|
|
|
|
addCustomCalculatedValue = (calcValName: string, updateFormula?: string, updateCalculation?: string): void => {
|
|
cy.findByText('Values').parentsUntil('.fields-header').last().next().click();
|
|
cy.get('#name').should('be.visible');
|
|
|
|
this.editCurrentCalculatedValue(calcValName, updateFormula, updateCalculation);
|
|
|
|
cy.findByText('Apply').click();
|
|
cy.findByText('Apply').should('not.exist');
|
|
};
|
|
|
|
addDataSheetCustomCalculatedValue = (calcValName: string, updateFormula?: string, updateCalculation?: string): void => {
|
|
cy.findByText('Columns').parentsUntil('.fields-column-header').last().next().click();
|
|
cy.findByText('Add Calculation').click();
|
|
cy.get('#name').should('be.visible');
|
|
|
|
this.editCurrentCalculatedValue(calcValName, updateFormula, updateCalculation);
|
|
|
|
cy.findByText('Apply').click({ force: true });
|
|
cy.findByText('Apply').should('not.exist');
|
|
};
|
|
|
|
addDataSheetCustomCalculatedValueToNumberedGroup = (whichGroup: number, calcValName: string, calculationFormula?: string, calculationCalculation?: string): void => {
|
|
cy.findAllByText('Columns')
|
|
.eq(whichGroup - 1)
|
|
.parentsUntil('.fields-column-header')
|
|
.last()
|
|
.next()
|
|
.click();
|
|
cy.findByText('Add Calculation').click();
|
|
cy.get('#name').should('be.visible');
|
|
|
|
this.editCurrentCalculatedValue(calcValName, calculationFormula, calculationCalculation);
|
|
|
|
cy.findByText('Apply').click();
|
|
cy.findByText('Apply').should('not.exist');
|
|
};
|
|
|
|
addNewDataSheetGroup = (): void => {
|
|
cy.findAllByText('Columns').first().parentsUntil('.fields-column-header').last().next().click();
|
|
cy.findByText('Add Group').click();
|
|
};
|
|
|
|
DuplicateGroup = (whichGroup: number): void => {
|
|
cy.findAllByText('Columns')
|
|
.eq(whichGroup - 1)
|
|
.parentsUntil('.fields-column-header')
|
|
.last()
|
|
.next()
|
|
.click();
|
|
cy.findByText('Duplicate Group').click();
|
|
};
|
|
|
|
deleteNumberedDataSheetGroup = (whichGroup: number): void => {
|
|
cy.findAllByText('Columns')
|
|
.eq(whichGroup - 1)
|
|
.parentsUntil('.fields-column-header')
|
|
.last()
|
|
.next()
|
|
.click();
|
|
cy.findAllByText('Delete Group').last().click();
|
|
};
|
|
|
|
addFromAdHoc = (adHocReport: string): void => {
|
|
cy.findByText('Add').click();
|
|
cy.findByText('From Adhoc', { timeout: 5000 }).should('exist');
|
|
cy.findByText('From Adhoc').click();
|
|
cy.findByText('Create from Ad-hoc', { timeout: 10000 }).should('exist');
|
|
|
|
cy.get('.ant-input').type(adHocReport);
|
|
cy.findByText(adHocReport).click();
|
|
cy.findByText('Create').click();
|
|
cy.get('.worksheet-tab__title').contains(adHocReport, { timeout: 10000 }).should('exist');
|
|
};
|
|
}
|