Get cycle day for day in any cycle, not just the current

This commit is contained in:
Julia Friesel
2018-06-07 11:14:07 +02:00
parent 1cf4087039
commit 3bc85d74fc
2 changed files with 34 additions and 1 deletions
+5 -1
View File
@@ -10,7 +10,11 @@ export default function config(opts) {
return function getCycleDayNumber(unsorted, targetDate) {
// sort the cycle days in descending order so we travel into
// the past as we iterate over the array
const cycleDays = [...unsorted].sort((a, b) => b.date.isAfter(a.date))
// also, to retrieve the number, we only need the cycle days before the target day
// TODO we can probably rely on the db to do the sorting for us
const sorted = [...unsorted].sort((a, b) => b.date.isAfter(a.date))
const firstDayBeforeTargetDayIndex = sorted.findIndex(day => day.date.isBefore(targetDate))
const cycleDays = sorted.slice(firstDayBeforeTargetDayIndex)
const lastPeriodStart = cycleDays.find((day, i) => {
if (
+29
View File
@@ -142,6 +142,35 @@ describe('getCycleDay', () => {
const result = getCycleDayNumber(cycleDays, targetDate)
expect(result).to.eql(15)
})
it('gets the correct number if the target day is not in the current cycle', () => {
const cycleDays = [{
date: moment([2018, 5, 14]),
}, {
date: moment([2018, 5, 13]),
bleeding: {
value: 2
}
}, {
date: moment([2018, 4, 12]),
}, {
date: moment([2018, 4, 11]),
bleeding: {
value: 2
}
}, {
date: moment([2018, 4, 10]),
bleeding: {
value: 2
}
}, {
date: moment([2018, 4, 9]),
}]
const targetDate = moment([2018, 4, 27])
const result = getCycleDayNumber(cycleDays, targetDate)
expect(result).to.eql(18)
})
})
describe('getCycleDay returns null', () => {