Files
analytics/cypress/cypress/pageObjects/advancedAnalyticsPageObject.ts
T
2026-06-23 11:18:54 -05:00

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');
};
}