🐛 Fixed incorrect MRR value on dashboard
closes https://github.com/TryGhost/Team/issues/950 - fixes the mrr value/chart on dashboard when a site has no new mrr events in more than 30 days shown as 0 - adds tests to cover more mrr event scenarios
This commit is contained in:
parent
4158fe24a2
commit
4860325964
|
@ -91,7 +91,13 @@ export default class MembersStatsService extends Service {
|
|||
const firstDateInRangeIndex = data.findIndex((val) => {
|
||||
return moment(val.date).isAfter(currentRangeDate);
|
||||
});
|
||||
const initialDateInRangeVal = firstDateInRangeIndex > 0 ? data[firstDateInRangeIndex - 1] : null;
|
||||
let initialDateInRangeVal = firstDateInRangeIndex > 0 ? data[firstDateInRangeIndex - 1] : null;
|
||||
if (firstDateInRangeIndex === 0 && !initialDateInRangeVal) {
|
||||
initialDateInRangeVal = data[firstDateInRangeIndex];
|
||||
}
|
||||
if (data.length > 0 && !initialDateInRangeVal && firstDateInRangeIndex !== 0) {
|
||||
initialDateInRangeVal = data[data.length - 1];
|
||||
}
|
||||
let lastVal = initialDateInRangeVal ? initialDateInRangeVal.value : 0;
|
||||
|
||||
while (currentRangeDate.isBefore(endDate)) {
|
||||
|
@ -113,6 +119,9 @@ export default class MembersStatsService extends Service {
|
|||
return moment(val.date).isAfter(currentRangeDate);
|
||||
});
|
||||
let initialDateInRangeVal = firstDateInRangeIndex > 0 ? data[firstDateInRangeIndex - 1] : null;
|
||||
if (firstDateInRangeIndex === 0 && !initialDateInRangeVal) {
|
||||
initialDateInRangeVal = data[firstDateInRangeIndex];
|
||||
}
|
||||
if (data.length > 0 && !initialDateInRangeVal && firstDateInRangeIndex !== 0) {
|
||||
initialDateInRangeVal = data[data.length - 1];
|
||||
}
|
||||
|
|
|
@ -12,7 +12,40 @@ describe('Unit: Service: membersStats', function () {
|
|||
memberStatsService = this.owner.lookup('service:membersStats');
|
||||
});
|
||||
|
||||
it('fills correct date and value for mrr data', function () {
|
||||
it('fills correct date and value for mrr data when no data points', function () {
|
||||
const data = [];
|
||||
const output = memberStatsService.fillDates(data);
|
||||
const values = Object.values(output);
|
||||
const keys = Object.keys(output);
|
||||
|
||||
expect(values[0]).to.equal(0);
|
||||
expect(keys[0]).to.equal(moment().subtract(30, 'days').format('YYYY-MM-DD'));
|
||||
expect(keys[keys.length - 1]).to.equal(moment().format('YYYY-MM-DD'));
|
||||
expect(values[values.length - 1]).to.equal(0);
|
||||
});
|
||||
|
||||
it('fills correct date and value for mrr data when no data point in range', function () {
|
||||
const data = [
|
||||
{
|
||||
date: moment().subtract(40, 'days').format('YYYY-MM-DD'),
|
||||
value: 10459
|
||||
},
|
||||
{
|
||||
date: moment().subtract(31, 'days').format('YYYY-MM-DD'),
|
||||
value: 14459
|
||||
}
|
||||
];
|
||||
const output = memberStatsService.fillDates(data);
|
||||
const values = Object.values(output);
|
||||
const keys = Object.keys(output);
|
||||
|
||||
expect(values[0]).to.equal(14459);
|
||||
expect(keys[0]).to.equal(moment().subtract(30, 'days').format('YYYY-MM-DD'));
|
||||
expect(keys[keys.length - 1]).to.equal(moment().format('YYYY-MM-DD'));
|
||||
expect(values[values.length - 1]).to.equal(14459);
|
||||
});
|
||||
|
||||
it('fills correct date and value for mrr data when first data point outside range', function () {
|
||||
const data = [
|
||||
{
|
||||
date: moment().subtract(31, 'days').format('YYYY-MM-DD'),
|
||||
|
@ -32,4 +65,21 @@ describe('Unit: Service: membersStats', function () {
|
|||
expect(keys[keys.length - 1]).to.equal(moment().format('YYYY-MM-DD'));
|
||||
expect(values[values.length - 1]).to.equal(98176);
|
||||
});
|
||||
|
||||
it('fills correct date and value for mrr data when only 1 data point in range', function () {
|
||||
const data = [
|
||||
{
|
||||
date: moment().subtract(29, 'days').format('YYYY-MM-DD'),
|
||||
value: 14459
|
||||
}
|
||||
];
|
||||
const output = memberStatsService.fillDates(data);
|
||||
const values = Object.values(output);
|
||||
const keys = Object.keys(output);
|
||||
|
||||
expect(values[0]).to.equal(14459);
|
||||
expect(keys[0]).to.equal(moment().subtract(30, 'days').format('YYYY-MM-DD'));
|
||||
expect(keys[keys.length - 1]).to.equal(moment().format('YYYY-MM-DD'));
|
||||
expect(values[values.length - 1]).to.equal(14459);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue