Skip to content
Snippets Groups Projects
index.spec.js 2.57 KiB
Newer Older
import chai from 'chai'
import getSensiplanStatus from '../../lib/sympto'

const expect = chai.expect

function convertToSymptoFormat(val, i) {
  const sympto = { date: i }
  if (val.temperature) sympto.temperature = { value: val.temperature }
  if (val.mucus) sympto.mucus = { value: val.mucus }
  if (val.bleeding) sympto.bleeding = { value: val.bleeding }
  return sympto
}

describe('sympto', () => {
  describe('evaluating mucus and temperature shift together', () => {
    it('reports fertile when mucus reaches best quality again within temperature evaluation phase', function () {
      const values = [
        { 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 }
      ]

      const temperatures = values.map(convertToSymptoFormat)
      const status = getSensiplanStatus(temperatures)
      expect(status).to.eql({
        assumeFertility: false,
        phases: [
          { startDate: 0, startTime: '00:00'},
          'TODO',
          { startDate: 17, startTime: '18:00'}
        ],
        temperatureShift: {
          detected: true,
          ltl: 36.55,
          rule: 0,
          firstHighMeasurementDay: {
            date: 15,
            temperature: { value: 36.7 },
            mucus: { value: 3 }
          },
          evaluationCompleteDay: {
            date: 17,
            temperature: { value: 36.75 },
            mucus: { value: 4 },
          }
        },
        mucusShift: {
          detected: true,
          mucusPeak: {
            date: 17,
            mucus: { value: 4 },
            temperature: { value: 36.75 },