fix(editor): Fix how deviation percentage is calculated in Insights summary (#15526)

This commit is contained in:
Guillaume Jacquart
2025-05-20 09:57:12 +02:00
committed by GitHub
parent 867842d473
commit 26de97976a
2 changed files with 14 additions and 12 deletions

View File

@@ -71,8 +71,8 @@ describe('Insights Transformers', () => {
describe('transformInsightsDeviation', () => {
describe('for total and failed types', () => {
it('should calculate percentage deviation', () => {
expect(transformInsightsDeviation.total(100, 10)).toBe(10);
expect(transformInsightsDeviation.failed(50, 5)).toBe(10);
expect(transformInsightsDeviation.total(110, 10)).toBe(10);
expect(transformInsightsDeviation.failed(55, 5)).toBe(10);
});
it('should return 0 if value and deviation are 0', () => {
@@ -80,9 +80,9 @@ describe('Insights Transformers', () => {
expect(transformInsightsDeviation.failed(0, 0)).toBe(0);
});
it('should return Infinity if value is 0 and deviation is not 0', () => {
expect(transformInsightsDeviation.total(0, 10)).toBe(Infinity);
expect(transformInsightsDeviation.failed(0, 5)).toBe(Infinity);
it('should return Infinity if value equals deviation (and thus previous value is 0)', () => {
expect(transformInsightsDeviation.total(10, 10)).toBe(Infinity);
expect(transformInsightsDeviation.failed(5, 5)).toBe(Infinity);
});
it('should return 0 if deviation is 0 and value is not 0', () => {
@@ -122,7 +122,7 @@ describe('Insights Transformers', () => {
it('should correctly transform InsightsSummary data and respect INSIGHTS_SUMMARY_ORDER', () => {
const summaryData: InsightsSummary = {
timeSaved: { value: 1200, deviation: 120, unit: 'minute' },
total: { value: 100, deviation: 10, unit: 'count' },
total: { value: 110, deviation: 10, unit: 'count' },
failureRate: { value: 0.05, deviation: 0.01, unit: 'ratio' },
averageRunTime: { value: 5000, deviation: 1000, unit: 'millisecond' },
failed: { value: 5, deviation: 1, unit: 'count' },
@@ -131,7 +131,7 @@ describe('Insights Transformers', () => {
const expectedOutput = [
{
id: 'total',
value: 100,
value: 110,
deviation: 10,
deviationUnit: '%',
unit: '',
@@ -139,7 +139,7 @@ describe('Insights Transformers', () => {
{
id: 'failed',
value: 5,
deviation: 20,
deviation: 25,
deviationUnit: '%',
unit: '',
},
@@ -176,7 +176,7 @@ describe('Insights Transformers', () => {
'averageRunTime',
]);
expect(INSIGHTS_UNIT_MAPPING.total).toHaveBeenCalledWith(100);
expect(INSIGHTS_UNIT_MAPPING.total).toHaveBeenCalledWith(110);
expect(INSIGHTS_DEVIATION_UNIT_MAPPING.total).toHaveBeenCalledWith(10);
expect(INSIGHTS_UNIT_MAPPING.failed).toHaveBeenCalledWith(5);
expect(INSIGHTS_DEVIATION_UNIT_MAPPING.failed).toHaveBeenCalledWith(1);
@@ -208,7 +208,7 @@ describe('Insights Transformers', () => {
{
id: 'failed',
value: 5,
deviation: 20,
deviation: 25,
deviationUnit: '%',
unit: '',
},

View File

@@ -19,14 +19,16 @@ export const transformInsightsValues: Record<InsightsSummaryType, (value: number
failureRate: transformInsightsFailureRate,
};
const getPreviousValue = (value: number, deviation: number): number => value - deviation;
export const transformInsightsDeviation: Record<
InsightsSummaryType,
(value: number, deviation: number) => number
> = {
total: (value: number, deviation: number) =>
value === 0 && deviation === 0 ? 0 : (deviation / value) * 100,
value === 0 && deviation === 0 ? 0 : (deviation / getPreviousValue(value, deviation)) * 100,
failed: (value: number, deviation: number) =>
value === 0 && deviation === 0 ? 0 : (deviation / value) * 100,
value === 0 && deviation === 0 ? 0 : (deviation / getPreviousValue(value, deviation)) * 100,
timeSaved: (_: number, deviation: number) => transformInsightsTimeSaved(deviation),
averageRunTime: (_: number, deviation: number) => transformInsightsAverageRunTime(deviation),
failureRate: (_: number, deviation: number) => transformInsightsFailureRate(deviation),