Skip to content

Commit 009d04e

Browse files
authored
Boost Score API: Move getScoreTier into the package (#53884)
1 parent bd70fef commit 009d04e

8 files changed

Lines changed: 57 additions & 27 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Significance: minor
2+
Type: added
3+
4+
Add getScoreTier, which groups a speed score into good, medium or poor.

‎projects/js-packages/boost-score-api/src/index.ts‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,3 +345,21 @@ export function calculateDaysSince( timestamp: number ): number {
345345

346346
return differenceInDays;
347347
}
348+
349+
export type ScoreTier = 'good' | 'medium' | 'poor';
350+
351+
/**
352+
* The tier a speed score falls in.
353+
*
354+
* @param {number} score - Speed score, 0 to 100.
355+
* @return {ScoreTier} The tier.
356+
*/
357+
export function getScoreTier( score: number ): ScoreTier {
358+
if ( score > 70 ) {
359+
return 'good';
360+
}
361+
if ( score > 50 ) {
362+
return 'medium';
363+
}
364+
return 'poor';
365+
}

‎projects/js-packages/boost-score-api/tests/index.test.ts‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
getScoreLetter,
66
didScoresChange,
77
getScoreMovementPercentage,
8+
getScoreTier,
89
} from '../src/index';
910

1011
const mockData = {
@@ -290,3 +291,16 @@ describe( 'getScoreMovementPercentage', () => {
290291
expect( getScoreMovementPercentage( changedMockData.scores ) ).toBe( 13 );
291292
} );
292293
} );
294+
295+
describe( 'getScoreTier', () => {
296+
it.each( [
297+
[ 0, 'poor' ],
298+
[ 50, 'poor' ],
299+
[ 51, 'medium' ],
300+
[ 70, 'medium' ],
301+
[ 71, 'good' ],
302+
[ 100, 'good' ],
303+
] )( 'puts a score of %i in the %s tier', ( score, tier ) => {
304+
expect( getScoreTier( Number( score ) ) ).toBe( tier );
305+
} );
306+
} );
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Significance: patch
2+
Type: changed
3+
Comment: BoostScoreBar takes its colour tiers from the score API package; no visible change.
4+

‎projects/js-packages/components/components/boost-score-bar/index.tsx‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1+
import { getScoreTier } from '@automattic/jetpack-boost-score-api';
12
import { __ } from '@wordpress/i18n';
23
import { Icon, desktop, mobile } from '@wordpress/icons';
34
import clsx from 'clsx';
45
import type { BoostScoreBarProps } from './types.ts';
6+
import type { ScoreTier } from '@automattic/jetpack-boost-score-api';
57
import type { FunctionComponent } from 'react';
68

79
import './style.scss';
810

11+
const TIER_FILLS: Record< ScoreTier, string > = {
12+
good: 'fill-good',
13+
medium: 'fill-mediocre',
14+
poor: 'fill-bad',
15+
};
16+
917
export const BoostScoreBar: FunctionComponent< BoostScoreBarProps > = ( {
1018
score,
1119
isLoading,
@@ -38,15 +46,7 @@ export const BoostScoreBar: FunctionComponent< BoostScoreBarProps > = ( {
3846
return 'fill-loading';
3947
}
4048

41-
if ( score > 70 ) {
42-
return 'fill-good';
43-
}
44-
45-
if ( score > 50 ) {
46-
return 'fill-mediocre';
47-
}
48-
49-
return 'fill-bad';
49+
return TIER_FILLS[ getScoreTier( score ) ];
5050
};
5151

5252
return (

‎projects/plugins/boost/_inc/overview/lib/score-utils.test.ts‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { getLocaleData, resetLocaleData, setLocaleData } from '@wordpress/i18n';
22
import {
33
formatScoreDelta,
44
getScoreDelta,
5-
getScoreTier,
65
getScoreTierColor,
76
getScoreTierLabel,
87
} from './score-utils';
@@ -13,17 +12,6 @@ test( 'uses the shared score card color tokens for each tier', () => {
1312
expect( getScoreTierColor( 'poor' ) ).toBe( 'var(--jetpack-boost-score-poor)' );
1413
} );
1514

16-
test.each( [
17-
[ 0, 'poor' ],
18-
[ 50, 'poor' ],
19-
[ 51, 'medium' ],
20-
[ 70, 'medium' ],
21-
[ 71, 'good' ],
22-
[ 100, 'good' ],
23-
] )( 'keeps the existing score tier at %i', ( score, tier ) => {
24-
expect( getScoreTier( Number( score ) ) ).toBe( tier );
25-
} );
26-
2715
test.each( [
2816
[ 'good', 'Good' ],
2917
[ 'medium', 'Could improve' ],

‎projects/plugins/boost/_inc/overview/lib/score-utils.ts‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1+
import { getScoreTier } from '@automattic/jetpack-boost-score-api';
12
import { __, _n, sprintf } from '@wordpress/i18n';
3+
import type { ScoreTier } from '@automattic/jetpack-boost-score-api';
24
import type { SpeedScoresSet } from './use-speed-scores';
35

4-
export type ScoreTier = 'good' | 'medium' | 'poor';
5-
6-
export function getScoreTier( score: number ): ScoreTier {
7-
// Keep tiers aligned with js-packages/components/components/boost-score-bar/index.tsx.
8-
return score > 70 ? 'good' : score > 50 ? 'medium' : 'poor';
9-
}
6+
export { getScoreTier };
7+
export type { ScoreTier };
108

119
export function getScoreTierLabel( tier: ScoreTier ): string {
1210
const labels = {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Significance: patch
2+
Type: changed
3+
Comment: Import getScoreTier from the score API package; no visible change.
4+

0 commit comments

Comments
 (0)