Current and Longest streak calculation fixed

Minor refactoring and unit tests added

After CR: user-stats file moved to util folder, export keywork added to exported functions, new line added at the end of gulp file

User-stats-test file moved to replicate user-stats path in test folder
This commit is contained in:
JelenaBarinova
2015-12-10 14:52:09 -08:00
parent cf65c698bb
commit 6c7d2685fd
8 changed files with 240 additions and 46 deletions

View File

@@ -0,0 +1,46 @@
import moment from 'moment';
import { dayCount } from '../utils/date-utils';
const daysBetween = 1.5;
export function calcCurrentStreak(cals) {
const revCals = cals.slice().reverse();
if (dayCount([moment(), revCals[0]]) > daysBetween) {
return 0;
}
let streakBroken = false;
const lastDayInStreak = revCals
.reduce((current, cal, index) => {
const before = revCals[index === 0 ? 0 : index - 1];
if (
!streakBroken &&
moment(before).diff(cal, 'days', true) < daysBetween
) {
return index;
}
streakBroken = true;
return current;
}, 0);
const lastTimestamp = revCals[lastDayInStreak];
return dayCount([moment(), lastTimestamp]);
}
export function calcLongestStreak(cals) {
let tail = cals[0];
const longest = cals.reduce((longest, head, index) => {
const last = cals[index === 0 ? 0 : index - 1];
// is streak broken
if (moment(head).diff(last, 'days', true) > daysBetween) {
tail = head;
}
if (dayCount(longest) < dayCount([head, tail])) {
return [head, tail];
}
return longest;
}, [cals[0], cals[0]]);
return dayCount(longest);
}