/**
|
* @file S&OP Chart component to wrap common methods the team encounter during development
|
* @description Chart class extending e2e's Chart.
|
* All S&OP page objects inherit from our own class (inheriting e2e/libappbase), but we can propose common methods to them.
|
* @author Clarence (clarence.chan@3ds.com)
|
* @copyright Dassault Systèmes
|
*/
|
import { ElementFinder } from '../e2elib/node_modules/protractor/built';
|
import { Chart } from '../e2elib/lib/src/pageobjects/chart/chart.component';
|
import { ChartData } from '../e2elib/lib/src/pageobjects/chart/chartdata.component';
|
import { ChartSeriesSOP } from './chartseriessop';
|
|
export class ChartSOP extends Chart {
|
public constructor(componentPath: string, isCustomPath?: boolean, elementObj?: ElementFinder) {
|
super(componentPath, isCustomPath, elementObj);
|
}
|
/**
|
* Verify the chart title
|
*
|
* @param chartTitle Chart Title
|
*/
|
public async verifyChartTitle(chartTitle: string): Promise<void> {
|
try {
|
const chartTitleActual = await this.getChartTitle();
|
expect(chartTitleActual).toBe(chartTitle, stepChart.incorrectChartTitle(chartTitle, chartTitleActual));
|
} catch {
|
Error('Failed to verify chart title');
|
}
|
}
|
|
/**
|
* Verify chart data point exists. Fails expect if data point value differs and throws error if no data point found.
|
*
|
* @param legendGroupName Legend group name.
|
* @param legendGroupItem Legend group item that forms part of the return value.
|
* @param label Label that forms part of the return value.
|
* @param expectedValue Expected y-axis value to verify.
|
*/
|
public async verifyHasDataPoint(legendGroupName: string, legendGroupItem: string, label: string, expectedValue: string, tolerance: number = 0): Promise<void> {
|
if (tolerance < 0) {
|
throw Error(`Tolerance (if defined) must be positive number. Current defined tolerance ${tolerance} when verifying data point for group = ${legendGroupName}, item = ${legendGroupItem}, label = ${label}.`);
|
}
|
|
try {
|
const chartValues = await this.getChartDataValue(legendGroupName, [legendGroupItem], [label]);
|
const actualValue = chartValues[0].values[0];
|
const valueWithinTolerance = Math.abs(Number(actualValue) - Number(expectedValue)) <= tolerance;
|
|
const toleranceMsg = tolerance > 0 ? ` (with tolerance +/- ${tolerance})` : ''; // If tolerance defined, output as part of failure message
|
expect(valueWithinTolerance).toBe(
|
true,
|
`Verify data point fail for group = ${legendGroupName}, item = ${legendGroupItem}, label = ${label}. Expected data point = ${expectedValue}, actual = ${actualValue}${toleranceMsg}.`);
|
} catch {
|
throw Error(`Cannot find data point for group = ${legendGroupName}, item = ${legendGroupItem}, label = ${label}.`);
|
}
|
}
|
|
/**
|
* Verify chart data point does not exist. Throws error if data point found.
|
*
|
* @param legendGroupName Legend group name.
|
* @param legendGroupItem Legend group item that forms part of the return value.
|
* @param label Label that forms part of the return value.
|
*/
|
public async verifyHasNoDataPoint(legendGroupName: string, legendGroupItem: string, label: string): Promise<void> {
|
let chartValues: ChartData[];
|
try {
|
chartValues = await this.getChartDataValue(legendGroupName, [legendGroupItem], [label]);
|
} catch {
|
return; // Catch error and return since we are expecting no data point
|
}
|
|
throw Error(`Expected no data point for group = ${legendGroupName}, item = ${legendGroupItem}, label = ${label}, but found y-axis value = ${chartValues[0].values[0]}.`);
|
}
|
|
/**
|
* Verify the number of series under the legend
|
*
|
* @param nrOfLegend Number of series under the legend
|
*/
|
public async verifyNrOfSeries(nrOfLegend: Number): Promise<void> {
|
try {
|
const actual = (await this.getChartLegend().getLegendGroupListItems(0)).length;
|
expect (actual).toBe(nrOfLegend, stepChart.incorrectNrOfLegend(nrOfLegend, actual));
|
} catch {
|
Error('Failed to verify Nr of Series');
|
}
|
}
|
|
/**
|
* Verify the number of X axis label
|
*
|
* @param nrOfLabel Number of x axis labels
|
*/
|
public async verifyXAxisLabelCount(nrOfLabel: number): Promise<void> {
|
const actual = await this.getXAxisLabelsCount();
|
expect(actual).toBe(nrOfLabel, stepChart.incorrectXAxisLabelCount(nrOfLabel, actual));
|
}
|
|
/**
|
* Verify if the series exist, and if the series exist, check if the criteria of the series if fullfilled
|
*
|
* @param seriesName Name of the series
|
* @param verifyCriteria Extra criteria to check against the series if it exist
|
*/
|
public async verifySeries(seriesName: string, verifyCriteria?: ChartSeriesCriteria): Promise<void> {
|
const series = await ChartSeriesSOP.getChartSeries(this, seriesName);
|
expect(series).toBeDefined(stepChart.seriesNotFound);
|
if (series && verifyCriteria?.Type) {
|
const actualChartType = await this.getSeriesChartType(series.seriesIndex);
|
expect(actualChartType).toBe(verifyCriteria.Type, stepChart.incorrectSeriesChartType(seriesName, verifyCriteria.Type, actualChartType));
|
}
|
}
|
|
/**
|
* Verify the y axis label title
|
*
|
* @param labelTitle Provided Y axis label title
|
*/
|
public async verifyYAxisLabelTitle(labelTitle: String): Promise<void> {
|
try {
|
const yAxisLabelTitle = await this.getYAxisTitle();
|
expect(yAxisLabelTitle).toBe(labelTitle, stepChart.incorrectYAxisLabelTitle(labelTitle, yAxisLabelTitle));
|
} catch {
|
Error('Failed to verify Y Axis Label title');
|
}
|
}
|
|
/**
|
* Verify the x axis label title(s)
|
*
|
* @param expectedLabels Provided X axis label title(s)
|
*/
|
public async verifyXAxisLabelTitle(expectedLabels: string[]): Promise<void> {
|
try {
|
const xAxisLabelTitle = await this.getXAxisLabels();
|
expect(xAxisLabelTitle).toEqual(expectedLabels, stepChart.incorrectXAxisLabelTitle(expectedLabels, xAxisLabelTitle));
|
} catch {
|
Error('Failed to verify X Axis Label title');
|
}
|
}
|
|
}
|
|
export interface ChartSeriesCriteria {
|
Type?: BarChartSeriesType;
|
}
|
|
export enum BarChartSeriesType {
|
Stacked_bar = 'stacked_bar',
|
}
|
|
// Step description to re-use in spec file to prevent scriptor re-write each time
|
export const stepChart = {
|
getChartValues: (chartName: string, legendGroupItem: string, dataToLookup: string[]): string => `In chart "${chartName}", get chart values for "${legendGroupItem}" at "${dataToLookup.join(', ')}".`,
|
getXAxisLabelCount: (chartName: string): string => `In chart "${chartName}", get the number of X Axis label.`,
|
incorrectChartTitle: (chartTitle: any, actual: any): string => `Chart title Expected "${chartTitle}", Actual "${actual}".`,
|
incorrectNrOfLegend: (legend: Number, actual: Number): string => `Number of legend Expected "${legend}", Actual "${actual}".`,
|
incorrectSeriesChartType: (seriesName: any, chartType: any, actual: any): string => `Series "${seriesName}" Expected Chart Type "${chartType}", Actual Chart Type "${actual}".`,
|
incorrectXAxisLabelCount : (nrOfLabel: number, actual: number): string => `Expected Number of X axis Label is : "${nrOfLabel}", actual Number of X axis Label is : ${actual}.`,
|
incorrectXAxisLabelTitle: (labelTitle: any, actual: any): string => `X axis label Expected "${labelTitle}", Actual "${actual}".`,
|
incorrectYAxisLabelTitle: (labelTitle: any, actual: any): string => `Y axis label Expected "${labelTitle}", Actual "${actual}".`,
|
seriesNotFound : (seriesName: any): string => `Series "${seriesName}" is not found.`,
|
verifyChartTitle: (chartTitle: any): string => `Verify that the chart title is "${chartTitle}".`,
|
verifyHasDataPoint: (chartName: string, legendGroupItem: string, label: string, expectedValue: string): string => {
|
return `In chart "${chartName}", verify chart value for "${legendGroupItem}" at "${label}" equals "${expectedValue}".`;
|
},
|
verifyNrOfSeries: (nrOfSeries: Number): string => `Verify the number of series in legend is "${nrOfSeries}".`,
|
verifySeries: (seriesName: any, seriestype?: any): string => `Verify Series "${seriesName}" exist with the correct series type : "${seriestype}".`,
|
verifyXAxisLabelCount: (nrOfLabel: any): string => `Verify that there are "${nrOfLabel}" X Axis Label.`,
|
verifyXAxisLabelTitle: (labelTitle: any): string => `Verify that the X Axis Label is "${labelTitle}"`,
|
verifyYAxisLabelTitle: (labelTitle: any): string => `Verify that the Y Axis Label is "${labelTitle}".`,
|
};
|
|
export { stepChart as StepChart };
|