From 81b7b46b238e6b65ca925ca57e9682d9e0004c16 Mon Sep 17 00:00:00 2001 From: Julia Friesel Date: Tue, 10 Jul 2018 14:22:40 +0200 Subject: [PATCH] Use explicit dates with gaps and fix bugs that this uncovers --- lib/sympto/pre-ovulatory.js | 8 ++- test/sympto/fixtures.js | 121 ++++++++++++++++-------------------- test/sympto/index.spec.js | 14 ++--- 3 files changed, 66 insertions(+), 77 deletions(-) diff --git a/lib/sympto/pre-ovulatory.js b/lib/sympto/pre-ovulatory.js index 634b410..5aa3c6a 100644 --- a/lib/sympto/pre-ovulatory.js +++ b/lib/sympto/pre-ovulatory.js @@ -1,5 +1,9 @@ +import { LocalDate } from "js-joda" + export default function(cycle) { - const fiveDayRuleDays = cycle.slice(0, 5) + const startDate = LocalDate.parse(cycle[0].date) + const fiveDayEndDate = startDate.plusDays(4).toString() + const fiveDayRuleDays = cycle.slice(0, 5).filter(d => d.date <= fiveDayEndDate) const preOvulatoryDays = getDaysUntilFertileMucus(fiveDayRuleDays) return { cycleDays: preOvulatoryDays, @@ -7,7 +11,7 @@ export default function(cycle) { date: preOvulatoryDays[0].date }, end: { - date: preOvulatoryDays[preOvulatoryDays.length - 1].date, + date: fiveDayEndDate } } } diff --git a/test/sympto/fixtures.js b/test/sympto/fixtures.js index 159c055..a7b237d 100644 --- a/test/sympto/fixtures.js +++ b/test/sympto/fixtures.js @@ -1,8 +1,6 @@ -function convertToSymptoFormat(val, i) { - ++i - const dayString = i < 10 ? `0${i}` : i - const sympto = { date: `2018-06-${dayString}` } +function convertToSymptoFormat(val) { + const sympto = { date: val.date } if (val.temperature) sympto.temperature = { value: val.temperature } if (val.mucus) sympto.mucus = { value: val.mucus } if (val.bleeding) sympto.bleeding = { value: val.bleeding } @@ -10,85 +8,72 @@ function convertToSymptoFormat(val, i) { } const cycleWithTempShift = [36.6, 36.6, 36.6, 36.6, 36.6, 36.6, 36.8, 36.8, 36.8] - .map(num => ({ temperature: num })) + .map(num => ({ date: '2018-06-01', temperature: num })) .map(convertToSymptoFormat) const cycleWithoutTempShift = [36.6, 36.6, 36.6, 36.6, 36.6, 36.6, 36.8, 36.8] - .map(num => ({ temperature: num })) + .map(num => ({ date: '2018-06-01', temperature: num })) .map(convertToSymptoFormat) const cycleWithTempAndMucusShift = [ - { temperature: 36.6, bleeding: 2 }, - { temperature: 36.65 }, - { temperature: 36.5 }, - { temperature: 36.6 }, - { temperature: 36.55 }, - { temperature: 36.7, mucus: 0 }, - { temperature: 36.75, mucus: 0 }, - { temperature: 36.45, mucus: 1 }, - { temperature: 36.5, mucus: 4 }, - { temperature: 36.4, mucus: 2 }, - { temperature: 36.5, mucus: 3 }, - { temperature: 36.55, mucus: 3 }, - { temperature: 36.45, mucus: 3 }, - { temperature: 36.5, mucus: 4 }, - { temperature: 36.55, mucus: 4 }, - { temperature: 36.7, mucus: 3 }, - { temperature: 36.65, mucus: 3 }, - { temperature: 36.75, mucus: 4 }, - { temperature: 36.8, mucus: 1 }, - { temperature: 36.85, mucus: 2 }, - { temperature: 36.8, mucus: 2 }, - { temperature: 36.9, mucus: 2 }, - { temperature: 36.9, mucus: 1 }, - { temperature: 36.85, mucus: 1 }, - { temperature: 36.9, mucus: 1 }, - { temperature: 36.8, mucus: 1 }, - { temperature: 36.9, mucus: 1 } + { date: '2018-06-01', temperature: 36.6, bleeding: 2 }, + { date: '2018-06-02', temperature: 36.65 }, + { date: '2018-06-04', temperature: 36.6 }, + { date: '2018-06-05', temperature: 36.55 }, + { date: '2018-06-06', temperature: 36.7, mucus: 0 }, + { date: '2018-06-09', temperature: 36.5, mucus: 4 }, + { date: '2018-06-10', temperature: 36.4, mucus: 2 }, + { date: '2018-06-13', temperature: 36.45, mucus: 3 }, + { date: '2018-06-14', temperature: 36.5, mucus: 4 }, + { date: '2018-06-15', temperature: 36.55, mucus: 4 }, + { date: '2018-06-16', temperature: 36.7, mucus: 3 }, + { date: '2018-06-17', temperature: 36.65, mucus: 3 }, + { date: '2018-06-18', temperature: 36.75, mucus: 4 }, + { date: '2018-06-19', temperature: 36.8, mucus: 1 }, + { date: '2018-06-20', temperature: 36.85, mucus: 2 }, + { date: '2018-06-21', temperature: 36.8, mucus: 2 }, + { date: '2018-06-22', temperature: 36.9, mucus: 2 }, + { date: '2018-06-25', temperature: 36.9, mucus: 1 }, + { date: '2018-06-26', temperature: 36.8, mucus: 1 }, + { date: '2018-06-27', temperature: 36.9, mucus: 1 } ].map(convertToSymptoFormat) const cycleWithTempAndNoMucusShift = [ - { temperature: 36.6, bleeding: 2 }, - { temperature: 36.65 }, - { temperature: 36.5 }, - { temperature: 36.6 }, - { temperature: 36.55 }, - { temperature: 36.7, mucus: 0 }, - { temperature: 36.75, mucus: 0 }, - { temperature: 36.45, mucus: 1 }, - { temperature: 36.5, mucus: 4 }, - { temperature: 36.4, mucus: 2 }, - { temperature: 36.5, mucus: 3 }, - { temperature: 36.55, mucus: 3 }, - { temperature: 36.45, mucus: 3 }, - { temperature: 36.5, mucus: 4 }, - { temperature: 36.55, mucus: 4 }, - { temperature: 36.7, mucus: 3 }, - { temperature: 36.65, mucus: 3 }, - { temperature: 36.75, mucus: 4 }, - { temperature: 36.8, mucus: 4 }, - { temperature: 36.85, mucus: 4 }, - { temperature: 36.8, mucus: 4 }, - { temperature: 36.9, mucus: 4 } + { date: '2018-06-01', temperature: 36.6, bleeding: 2 }, + { date: '2018-06-02', temperature: 36.65 }, + { date: '2018-06-05', temperature: 36.55 }, + { date: '2018-06-06', temperature: 36.7, mucus: 0 }, + { date: '2018-06-08', temperature: 36.45, mucus: 1 }, + { date: '2018-06-09', temperature: 36.5, mucus: 4 }, + { date: '2018-06-10', temperature: 36.4, mucus: 2 }, + { date: '2018-06-11', temperature: 36.5, mucus: 3 }, + { date: '2018-06-13', temperature: 36.45, mucus: 3 }, + { date: '2018-06-14', temperature: 36.5, mucus: 4 }, + { date: '2018-06-15', temperature: 36.55, mucus: 4 }, + { date: '2018-06-16', temperature: 36.7, mucus: 3 }, + { date: '2018-06-17', temperature: 36.65, mucus: 3 }, + { date: '2018-06-18', temperature: 36.75, mucus: 4 }, + { date: '2018-06-19', temperature: 36.8, mucus: 4 }, + { date: '2018-06-20', temperature: 36.85, mucus: 4 }, + { date: '2018-06-23', temperature: 36.9, mucus: 3 }, + { date: '2018-06-24', temperature: 36.85, mucus: 4 }, + { date: '2018-06-26', temperature: 36.8, mucus: 4 }, + { date: '2018-06-27', temperature: 36.9, mucus: 4 } ].map(convertToSymptoFormat) const cycleWithoutAnyShifts = [ - { temperature: 36.6, bleeding: 2 }, - { temperature: 36.65 }, - { temperature: 36.5 }, - { temperature: 36.6 }, - { temperature: 36.55 }, - { temperature: 36.7, mucus: 0 }, - { temperature: 36.75, mucus: 0 }, - { temperature: 36.45, mucus: 1 } + { date: '2018-06-01', temperature: 36.6, bleeding: 2 }, + { date: '2018-06-02', temperature: 36.65 }, + { date: '2018-06-04', temperature: 36.6 }, + { date: '2018-06-05', temperature: 36.55 }, + { date: '2018-06-06', temperature: 36.7, mucus: 0 }, + { date: '2018-06-07', temperature: 36.75, mucus: 0 }, + { date: '2018-06-08', temperature: 36.45, mucus: 1 } ].map(convertToSymptoFormat) const fiveDayCycle = [ - { temperature: 36.6, bleeding: 2 }, - { temperature: 36.65 }, - { temperature: 36.5 }, - { temperature: 36.6 }, - { temperature: 36.55 } + { date: '2018-06-01', bleeding: 2 }, + { date: '2018-06-03', bleeding: 3 }, ].map(convertToSymptoFormat) export { diff --git a/test/sympto/index.spec.js b/test/sympto/index.spec.js index b223629..46d234f 100644 --- a/test/sympto/index.spec.js +++ b/test/sympto/index.spec.js @@ -39,14 +39,14 @@ describe('sympto', () => { expect(status.phases.periOvulatory).to.eql({ start: { date: '2018-06-01' }, end: { date: '2018-06-21', time: '18:00' }, - cycleDays: cycleWithTempAndMucusShift.slice(0, 21) + cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date <= '2018-06-21') }) expect(status.phases.postOvulatory).to.eql({ start: { date: '2018-06-21', time: '18:00' }, - cycleDays: cycleWithTempAndMucusShift.slice(20) + cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date >= '2018-06-21') }) }) }) @@ -79,12 +79,12 @@ describe('sympto', () => { expect(Object.keys(status.phases).length).to.eql(2) expect(status.assumeFertility).to.be.true() expect(status.phases.preOvulatory).to.eql({ - cycleDays: cycleWithTempAndNoMucusShift.slice(0,5), + cycleDays: cycleWithTempAndNoMucusShift.filter(({date}) => date <= '2018-06-05'), start: { date: '2018-06-01' }, end: { date: '2018-06-05' } }) expect(status.phases.periOvulatory).to.eql({ - cycleDays: cycleWithTempAndNoMucusShift.slice(5), + cycleDays: cycleWithTempAndNoMucusShift.filter(({date}) => date > '2018-06-05'), start: { date: '2018-06-06' } }) }) @@ -100,17 +100,17 @@ describe('sympto', () => { expect(Object.keys(status.phases).length).to.eql(3) expect(status.assumeFertility).to.be.false() expect(status.phases.preOvulatory).to.eql({ - cycleDays: cycleWithTempAndMucusShift.slice(0,5), + cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date <= '2018-06-05'), start: { date: '2018-06-01' }, end: { date: '2018-06-05' } }) expect(status.phases.periOvulatory).to.eql({ - cycleDays: cycleWithTempAndMucusShift.slice(5, 21), + cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date > '2018-06-05' && date <= '2018-06-21'), start: { date: '2018-06-06' }, end: { date: '2018-06-21', time: '18:00'} }) expect(status.phases.postOvulatory).to.eql({ - cycleDays: cycleWithTempAndMucusShift.slice(20), + cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date >= '2018-06-21'), start: { date: '2018-06-21', time: '18:00'} }) })