Skip to content
Snippets Groups Projects
index.spec.js 4.34 KiB
Newer Older
import chai from 'chai'
import getSensiplanStatus from '../../lib/sympto'
Julia Friesel's avatar
Julia Friesel committed
import {
  cycleWithoutTempShift, cycleWithTempAndMucusShift, cycleWithTempAndNoMucusShift, cycleWithTempShift, cycleWithoutAnyShifts, fiveDayCycle
Julia Friesel's avatar
Julia Friesel committed
} from './fixtures'

const expect = chai.expect

describe('sympto', () => {
  describe('evaluating mucus and temperature shift together', () => {
    describe('with no previous higher measurement', () => {
Julia Friesel's avatar
Julia Friesel committed
      it('with no shifts detects only peri-ovulatory', function () {
        const status = getSensiplanStatus({
Julia Friesel's avatar
Julia Friesel committed
          cycle: cycleWithoutAnyShifts,
          previousCycle: cycleWithoutTempShift
        })

        expect(status).to.eql({
          assumeFertility: true,
          phases: {
            periOvulatory: {
Julia Friesel's avatar
Julia Friesel committed
              start: { date: '2018-06-01' },
Julia Friesel's avatar
Julia Friesel committed
              cycleDays: cycleWithoutAnyShifts
Julia Friesel's avatar
Julia Friesel committed
      it('with shifts detects only peri-ovulatory and post-ovulatory', function () {
        const status = getSensiplanStatus({
          cycle: cycleWithTempAndMucusShift,
          previousCycle: cycleWithoutTempShift
        })
        expect(status.temperatureShift).to.be.an('object')
        expect(status.mucusShift).to.be.an('object')
Julia Friesel's avatar
Julia Friesel committed
        expect(status.assumeFertility).to.be.false()
        expect(Object.keys(status.phases).length).to.eql(2)
        expect(status.phases.periOvulatory).to.eql({
Julia Friesel's avatar
Julia Friesel committed
          start: { date: '2018-06-01' },
Julia Friesel's avatar
Julia Friesel committed
          end: { date: '2018-06-21', time: '18:00' },
          cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date <= '2018-06-21')
        })
        expect(status.phases.postOvulatory).to.eql({
          start: {
Julia Friesel's avatar
Julia Friesel committed
            date: '2018-06-21',
          cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date >= '2018-06-21')
Julia Friesel's avatar
Julia Friesel committed
  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' }
        })
      })

    })
Julia Friesel's avatar
Julia Friesel committed
    describe('with no shifts detects pre- and peri-ovulatory phase', function () {
Julia Friesel's avatar
Julia Friesel committed
      it('according to 5-day-rule', function () {
        const status = getSensiplanStatus({
          cycle: cycleWithTempAndNoMucusShift,
          previousCycle: cycleWithTempShift
        })

Julia Friesel's avatar
Julia Friesel committed
        expect(Object.keys(status.phases).length).to.eql(2)
Julia Friesel's avatar
Julia Friesel committed
        expect(status.assumeFertility).to.be.true()
        expect(status.phases.preOvulatory).to.eql({
          cycleDays: cycleWithTempAndNoMucusShift.filter(({date}) => date <= '2018-06-05'),
Julia Friesel's avatar
Julia Friesel committed
          start: { date: '2018-06-01' },
          end: { date: '2018-06-05' }
        })
        expect(status.phases.periOvulatory).to.eql({
          cycleDays: cycleWithTempAndNoMucusShift.filter(({date}) => date > '2018-06-05'),
Julia Friesel's avatar
Julia Friesel committed
          start: { date: '2018-06-06' }
        })
Julia Friesel's avatar
Julia Friesel committed
    })
Julia Friesel's avatar
Julia Friesel committed
    describe('with shifts detects pre- and peri-ovulatory phase', function () {
      it('according to 5-day-rule', function () {
        const status = getSensiplanStatus({
          cycle: cycleWithTempAndMucusShift,
          previousCycle: cycleWithTempShift
        })

        expect(Object.keys(status.phases).length).to.eql(3)
        expect(status.assumeFertility).to.be.false()
        expect(status.phases.preOvulatory).to.eql({
          cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date <= '2018-06-05'),
Julia Friesel's avatar
Julia Friesel committed
          start: { date: '2018-06-01' },
          end: { date: '2018-06-05' }
        })
        expect(status.phases.periOvulatory).to.eql({
          cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date > '2018-06-05' && date <= '2018-06-21'),
Julia Friesel's avatar
Julia Friesel committed
          start: { date: '2018-06-06' },
          end: { date: '2018-06-21', time: '18:00'}
        })
        expect(status.phases.postOvulatory).to.eql({
          cycleDays: cycleWithTempAndMucusShift.filter(({date}) => date >= '2018-06-21'),
Julia Friesel's avatar
Julia Friesel committed
          start: { date: '2018-06-21', time: '18:00'}
        })
      })

    })