From 3e560b4e95b0b2dea1701712e99be0a68564ede8 Mon Sep 17 00:00:00 2001 From: Dushyant Acharya Date: Sun, 13 Sep 2026 09:41:23 +0530 Subject: [PATCH] fix(analytics): fix bus factor calculation on contributors page (#230) --- src/services/analytics.healthMetrics.test.js | 9 ++++++++- src/services/analytics.js | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/services/analytics.healthMetrics.test.js b/src/services/analytics.healthMetrics.test.js index 44781173..49433f44 100644 --- a/src/services/analytics.healthMetrics.test.js +++ b/src/services/analytics.healthMetrics.test.js @@ -115,8 +115,15 @@ describe('computeBusFactor', () => { }) it('supports model contributor objects using totalContribs', () => { - const contributors = [{ totalContribs: 60 }, { totalContribs: 40 }] + const contributors = [ + { login: 'alice', totalContribs: 60 }, + { login: 'bob', totalContribs: 40 } + ] expect(computeBusFactor(contributors)).toEqual({ factor: 1, risk: 'critical' }) }) + + it('supports primitive numbers array', () => { + expect(computeBusFactor([60, 40])).toEqual({ factor: 1, risk: 'critical' }) + }) }) diff --git a/src/services/analytics.js b/src/services/analytics.js index 8546455e..ed07784b 100644 --- a/src/services/analytics.js +++ b/src/services/analytics.js @@ -21,7 +21,7 @@ export function computeActivityClassification(repo) { // Bus Factor export function computeBusFactor(contributors = []) { if (!contributors.length) return { factor: 0, risk: 'unknown' } - const getCount = c => c.contributions ?? c.totalContribs ?? 0 + const getCount = c => (typeof c === 'number' ? c : (c.contributions ?? c.totalContribs ?? 0)) const total = contributors.reduce((s, c) => s + getCount(c), 0) if (!total) return { factor: 0, risk: 'unknown' } let cum = 0