Handle pre-ovulatory = current

This commit is contained in:
Julia Friesel
2018-07-10 13:22:34 +02:00
parent 51bd75fb0f
commit 0de009335f
3 changed files with 38 additions and 10 deletions
+10 -8
View File
@@ -7,23 +7,25 @@ export default function ({ cycle, previousCycle }) {
// TODO check for basic stuff, throw if nonexistent // TODO check for basic stuff, throw if nonexistent
const status = { const status = {
assumeFertility: true, assumeFertility: true,
phases: { phases: {}
periOvulatory: {
start: {
date: null
},
cycleDays: null
}
}
} }
// if there was no first higher measurement in the previous cycle, // if there was no first higher measurement in the previous cycle,
// no infertile pre-ovulatory phase may be assumed // no infertile pre-ovulatory phase may be assumed
if (getTemperatureShift(previousCycle).detected && !cycle[0].mucus) { if (getTemperatureShift(previousCycle).detected && !cycle[0].mucus) {
status.phases.preOvulatory = getPreOvulatoryPhase(cycle) status.phases.preOvulatory = getPreOvulatoryPhase(cycle)
if (status.phases.preOvulatory.cycleDays.length === cycle.length) {
status.assumeFertility = false
return status
}
} }
status.phases.periOvulatory = {
start: { date: null },
cycleDays: []
}
const periPhase = status.phases.periOvulatory const periPhase = status.phases.periOvulatory
if (status.phases.preOvulatory) { if (status.phases.preOvulatory) {
const prePhase = status.phases.preOvulatory const prePhase = status.phases.preOvulatory
periPhase.start.date = LocalDate.parse(prePhase.end.date).plusDays(1).toString() periPhase.start.date = LocalDate.parse(prePhase.end.date).plusDays(1).toString()
+10 -1
View File
@@ -83,10 +83,19 @@ const cycleWithoutAnyShifts = [
{ temperature: 36.45, mucus: 1 } { temperature: 36.45, mucus: 1 }
].map(convertToSymptoFormat) ].map(convertToSymptoFormat)
const fiveDayCycle = [
{ temperature: 36.6, bleeding: 2 },
{ temperature: 36.65 },
{ temperature: 36.5 },
{ temperature: 36.6 },
{ temperature: 36.55 }
].map(convertToSymptoFormat)
export { export {
cycleWithoutTempShift, cycleWithoutTempShift,
cycleWithTempAndMucusShift, cycleWithTempAndMucusShift,
cycleWithTempAndNoMucusShift, cycleWithTempAndNoMucusShift,
cycleWithTempShift, cycleWithTempShift,
cycleWithoutAnyShifts cycleWithoutAnyShifts,
fiveDayCycle
} }
+18 -1
View File
@@ -1,7 +1,7 @@
import chai from 'chai' import chai from 'chai'
import getSensiplanStatus from '../../lib/sympto' import getSensiplanStatus from '../../lib/sympto'
import { import {
cycleWithoutTempShift, cycleWithTempAndMucusShift, cycleWithTempAndNoMucusShift, cycleWithTempShift, cycleWithoutAnyShifts cycleWithoutTempShift, cycleWithTempAndMucusShift, cycleWithTempAndNoMucusShift, cycleWithTempShift, cycleWithoutAnyShifts, fiveDayCycle
} from './fixtures' } from './fixtures'
const expect = chai.expect const expect = chai.expect
@@ -52,6 +52,23 @@ describe('sympto', () => {
}) })
}) })
describe('with previous higher measurement', () => { describe('with previous higher measurement', () => {
describe('with no shifts detects pre-ovulatory phase', function () {
it('according to 5-day-rule', function () {
const status = getSensiplanStatus({
cycle: fiveDayCycle,
previousCycle: cycleWithTempShift
})
expect(Object.keys(status.phases).length).to.eql(1)
expect(status.assumeFertility).to.be.false()
expect(status.phases.preOvulatory).to.eql({
cycleDays: fiveDayCycle,
start: { date: '2018-06-01' },
end: { date: '2018-06-05' }
})
})
})
describe('with no shifts detects pre- and peri-ovulatory phase', function () { describe('with no shifts detects pre- and peri-ovulatory phase', function () {
it('according to 5-day-rule', function () { it('according to 5-day-rule', function () {
const status = getSensiplanStatus({ const status = getSensiplanStatus({