43bb83f7bb
ref https://linear.app/tryghost/issue/SLO-168/rangeerror-maximum-call-stack-size-exceeded - this extracts a function to a util so we can unit test it - this function is about to be optimized but having unit tests allows us to make the change with confidence
185 lines
4.3 KiB
JavaScript
185 lines
4.3 KiB
JavaScript
import mergeStatsByDate from 'ghost-admin/utils/merge-stats-by-date';
|
|
import {describe, it} from 'mocha';
|
|
import {expect} from 'chai';
|
|
|
|
const STATS_DATA = [
|
|
{
|
|
date: '2024-06-22',
|
|
tier: '111111111111111111111111',
|
|
cadence: 'month',
|
|
positive_delta: 0,
|
|
negative_delta: 0,
|
|
signups: 0,
|
|
cancellations: 0,
|
|
count: 456
|
|
},
|
|
{
|
|
date: '2024-06-22',
|
|
tier: '111111111111111111111111',
|
|
cadence: 'year',
|
|
positive_delta: 1,
|
|
negative_delta: 1,
|
|
signups: 0,
|
|
cancellations: 0,
|
|
count: 1354
|
|
},
|
|
{
|
|
date: '2024-06-23',
|
|
tier: '111111111111111111111111',
|
|
cadence: 'month',
|
|
positive_delta: 0,
|
|
negative_delta: 0,
|
|
signups: 0,
|
|
cancellations: 0,
|
|
count: 456
|
|
},
|
|
{
|
|
date: '2024-06-23',
|
|
tier: '111111111111111111111111',
|
|
cadence: 'year',
|
|
positive_delta: 1,
|
|
negative_delta: 1,
|
|
signups: 0,
|
|
cancellations: 0,
|
|
count: 1354
|
|
},
|
|
{
|
|
date: '2024-06-23',
|
|
tier: '111111111111111111111113',
|
|
cadence: 'year',
|
|
positive_delta: 0,
|
|
negative_delta: 0,
|
|
signups: 0,
|
|
cancellations: 0,
|
|
count: 400
|
|
},
|
|
{
|
|
date: '2024-06-24',
|
|
tier: '111111111111111111111111',
|
|
cadence: 'year',
|
|
positive_delta: 3,
|
|
negative_delta: 2,
|
|
signups: 1,
|
|
cancellations: 0,
|
|
count: 1355
|
|
},
|
|
{
|
|
date: '2024-06-24',
|
|
tier: '111111111111111111111113',
|
|
cadence: 'year',
|
|
positive_delta: 2,
|
|
negative_delta: 1,
|
|
signups: 2,
|
|
cancellations: 1,
|
|
count: 401
|
|
},
|
|
{
|
|
date: '2024-06-24',
|
|
tier: '111111111111111111111112',
|
|
cadence: 'year',
|
|
positive_delta: 1,
|
|
negative_delta: 0,
|
|
signups: 1,
|
|
cancellations: 0,
|
|
count: 55
|
|
},
|
|
{
|
|
date: '2024-06-25',
|
|
tier: '111111111111111111111111',
|
|
cadence: 'month',
|
|
positive_delta: 0,
|
|
negative_delta: 1,
|
|
signups: 0,
|
|
cancellations: 1,
|
|
count: 455
|
|
},
|
|
{
|
|
date: '2024-06-25',
|
|
tier: '111111111111111111111111',
|
|
cadence: 'year',
|
|
positive_delta: 2,
|
|
negative_delta: 5,
|
|
signups: 1,
|
|
cancellations: 4,
|
|
count: 1352
|
|
},
|
|
{
|
|
date: '2024-06-25',
|
|
tier: '111111111111111111111113',
|
|
cadence: 'year',
|
|
positive_delta: 1,
|
|
negative_delta: 2,
|
|
signups: 1,
|
|
cancellations: 2,
|
|
count: 400
|
|
},
|
|
{
|
|
date: '2024-06-26',
|
|
tier: '111111111111111111111111',
|
|
cadence: 'year',
|
|
positive_delta: 2,
|
|
negative_delta: 2,
|
|
signups: 0,
|
|
cancellations: 0,
|
|
count: 1352
|
|
},
|
|
{
|
|
date: '2024-06-26',
|
|
tier: '111111111111111111111113',
|
|
cadence: 'year',
|
|
positive_delta: 0,
|
|
negative_delta: 0,
|
|
signups: 0,
|
|
cancellations: 0,
|
|
count: 400
|
|
}
|
|
];
|
|
|
|
describe('mergeStatsByDate', function () {
|
|
it('merges stats as expected', function () {
|
|
const result = mergeStatsByDate(STATS_DATA);
|
|
expect(result).to.deep.equal([
|
|
{
|
|
date: '2024-06-22',
|
|
count: 1810,
|
|
positiveDelta: 1,
|
|
negativeDelta: 1,
|
|
signups: 0,
|
|
cancellations: 0
|
|
},
|
|
{
|
|
date: '2024-06-23',
|
|
count: 2210,
|
|
positiveDelta: 1,
|
|
negativeDelta: 1,
|
|
signups: 0,
|
|
cancellations: 0
|
|
},
|
|
{
|
|
date: '2024-06-24',
|
|
count: 1811,
|
|
positiveDelta: 6,
|
|
negativeDelta: 3,
|
|
signups: 4,
|
|
cancellations: 1
|
|
},
|
|
{
|
|
date: '2024-06-25',
|
|
count: 2207,
|
|
positiveDelta: 3,
|
|
negativeDelta: 8,
|
|
signups: 2,
|
|
cancellations: 7
|
|
},
|
|
{
|
|
date: '2024-06-26',
|
|
count: 1752,
|
|
positiveDelta: 2,
|
|
negativeDelta: 2,
|
|
signups: 0,
|
|
cancellations: 0
|
|
}
|
|
]);
|
|
});
|
|
});
|