@allurereport/plugin-dashboard
Version:
Allure Dashboard Plugin – plugin for generating dashboard with a mix of charts
47 lines (46 loc) • 2.59 kB
JavaScript
import { severityLabelName, severityLevels } from "@allurereport/core-api";
import { createEmptySeries, createEmptyStats, getTrendDataGeneric, mergeTrendDataGeneric, normalizeStatistic, } from "../utils/trend.js";
export const getSeverityTrendData = (testResults, reportName, historyPoints, chartOptions) => {
const { limit } = chartOptions;
const historyLimit = limit && limit > 0 ? Math.max(0, limit - 1) : undefined;
const limitedHistoryPoints = historyLimit !== undefined ? historyPoints.slice(-historyLimit) : historyPoints;
const firstOriginalIndex = historyLimit !== undefined ? Math.max(0, historyPoints.length - historyLimit) : 0;
const convertedHistoryPoints = limitedHistoryPoints.map((point, index) => {
const originalIndex = firstOriginalIndex + index;
return {
name: point.name,
originalIndex,
statistic: Object.values(point.testResults).reduce((stat, test) => {
const severityLabel = test.labels?.find((label) => label.name === severityLabelName);
const severity = severityLabel?.value?.toLowerCase();
if (severity) {
stat[severity] = (stat[severity] ?? 0) + 1;
}
return stat;
}, createEmptyStats(severityLevels)),
};
});
const currentSeverityStats = testResults.reduce((acc, test) => {
const severityLabel = test.labels.find((label) => label.name === severityLabelName);
const severity = severityLabel?.value?.toLowerCase();
if (severity) {
acc[severity] = (acc[severity] ?? 0) + 1;
}
return acc;
}, createEmptyStats(severityLevels));
const currentTrendData = getTrendDataGeneric(normalizeStatistic(currentSeverityStats, severityLevels), reportName, historyPoints.length + 1, severityLevels, chartOptions);
const historicalTrendData = convertedHistoryPoints.reduce((acc, historyPoint) => {
const trendDataPart = getTrendDataGeneric(normalizeStatistic(historyPoint.statistic, severityLevels), historyPoint.name, historyPoint.originalIndex + 1, severityLevels, chartOptions);
return mergeTrendDataGeneric(acc, trendDataPart, severityLevels);
}, {
type: chartOptions.type,
dataType: chartOptions.dataType,
title: chartOptions.title,
points: {},
slices: {},
series: createEmptySeries(severityLevels),
min: Infinity,
max: -Infinity,
});
return mergeTrendDataGeneric(historicalTrendData, currentTrendData, severityLevels);
};