Skip to content

Commit

Permalink
feat(utils): find displayValue diffs
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickhulce committed Oct 15, 2019
1 parent a3cfd4e commit 590bf04
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 3 deletions.
19 changes: 18 additions & 1 deletion packages/utils/src/audit-diff-finder.js
Expand Up @@ -166,6 +166,10 @@ function createAuditDiff(diff) {
return {auditId, type, baseItemIndex};
}

if (type === 'displayValue') {
throw new Error('Do not use createAuditDiff for displayValue, just manually create');
}

if (
typeof compareValue !== 'number' ||
typeof baseValue !== 'number' ||
Expand Down Expand Up @@ -354,7 +358,7 @@ function normalizeDetailsItems(audit) {
/**
* @param {LH.AuditResult} baseAudit
* @param {LH.AuditResult} compareAudit
* @param {{forceAllScoreDiffs?: boolean, percentAbsoluteDeltaThreshold?: number}} options
* @param {{forceAllScoreDiffs?: boolean, skipDisplayValueDiffs?: boolean, percentAbsoluteDeltaThreshold?: number}} options
* @return {Array<LHCI.AuditDiff>}
*/
function findAuditDiffs(baseAudit, compareAudit, options = {}) {
Expand Down Expand Up @@ -388,6 +392,15 @@ function findAuditDiffs(baseAudit, compareAudit, options = {}) {
);
}

if (typeof baseAudit.displayValue === 'string' || typeof compareAudit.displayValue === 'string') {
diffs.push({
auditId,
type: 'displayValue',
baseValue: baseAudit.displayValue || '',
compareValue: compareAudit.displayValue || '',
});
}

if (
(baseAudit.details && baseAudit.details.items) ||
(compareAudit.details && compareAudit.details.items)
Expand Down Expand Up @@ -416,6 +429,10 @@ function findAuditDiffs(baseAudit, compareAudit, options = {}) {
if (diff.type === 'score' && !options.forceAllScoreDiffs) {
return getScoreLevel(diff.baseValue) !== getScoreLevel(diff.compareValue);
}
// If it's a display value change, ensure the values are different, and defer to the options.
if (diff.type === 'displayValue') {
return diff.baseValue !== diff.compareValue && !options.skipDisplayValueDiffs;
}

// Ensure the percent delta is above our threshold (0 by default).
return getDeltaStats(diff).percentAbsoluteDelta > percentAbsoluteDeltaThreshold;
Expand Down
17 changes: 15 additions & 2 deletions packages/utils/test/audit-diff-finder.test.js
Expand Up @@ -17,8 +17,8 @@ const {

describe('#findAuditDiffs', () => {
it('should return empty array for identical audits', () => {
const baseAudit = {id: 'audit', score: 0.5};
const compareAudit = {id: 'audit', score: 0.5};
const baseAudit = {id: 'audit', score: 0.5, displayValue: '4 items'};
const compareAudit = {id: 'audit', score: 0.5, displayValue: '4 items'};
expect(findAuditDiffs(baseAudit, compareAudit)).toEqual([]);
});

Expand Down Expand Up @@ -171,6 +171,19 @@ describe('#findAuditDiffs', () => {
]);
});

it('should find a displayValue diff', () => {
const baseAudit = {id: 'audit', score: 0.4, displayValue: '4 items'};
const compareAudit = {id: 'audit', score: 0.4, displayValue: '2 items'};
expect(findAuditDiffs(baseAudit, compareAudit)).toEqual([
{
auditId: 'audit',
type: 'displayValue',
baseValue: '4 items',
compareValue: '2 items',
},
]);
});

it('should find a details item addition diff for not applicable', () => {
const detailsItem = {url: 'http://example.com/foo.js'};
const baseAudit = {id: 'audit', score: null, scoreDisplayMode: 'notApplicable'};
Expand Down
8 changes: 8 additions & 0 deletions types/utils.d.ts
Expand Up @@ -10,6 +10,7 @@ declare global {
| 'error'
| 'score'
| 'numericValue'
| 'displayValue'
| 'itemCount'
| 'itemAddition'
| 'itemRemoval'
Expand Down Expand Up @@ -52,8 +53,15 @@ declare global {
compareValue?: number;
}

export interface DisplayValueAuditDiff extends BaseAuditDiff {
type: 'displayValue';
baseValue: string;
compareValue: string;
}

export type AuditDiff =
| NumericAuditDiff
| DisplayValueAuditDiff
| ItemAdditionAuditDiff
| ItemRemovalAuditDiff
| NumericItemAuditDiff
Expand Down

0 comments on commit 590bf04

Please sign in to comment.