151 lines
3.7 KiB
JavaScript
151 lines
3.7 KiB
JavaScript
import chai from 'chai'
|
|
import dirtyChai from 'dirty-chai'
|
|
import maybeSetNewCycleStart from '../lib/set-new-cycle-start'
|
|
|
|
const expect = chai.expect
|
|
chai.use(dirtyChai)
|
|
|
|
describe('maybeSetNewCycleStart', () => {
|
|
const deletedBleedingValue = null
|
|
|
|
const excludedBleedingValue = {
|
|
value: 2,
|
|
exclude: true
|
|
}
|
|
|
|
|
|
function getFixtures() {
|
|
const cycleStartDay = {
|
|
date: '2020-01-01',
|
|
isCycleStart: true,
|
|
bleeding: {
|
|
value: 2,
|
|
exclude: false
|
|
}
|
|
}
|
|
|
|
const mensesDaysAfter = [
|
|
{
|
|
date: '2020-01-04',
|
|
isCycleStart: false,
|
|
value: {
|
|
bleeding: {
|
|
value: 2,
|
|
exclude: false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
date: '2020-01-03',
|
|
isCycleStart: false,
|
|
value: {
|
|
bleeding: {
|
|
value: 2,
|
|
exclude: false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
date: '2020-01-02',
|
|
isCycleStart: false,
|
|
value: {
|
|
bleeding: {
|
|
value: 2,
|
|
exclude: false
|
|
}
|
|
}
|
|
}
|
|
]
|
|
|
|
const notCycleStartDay = {
|
|
date: '2020-01-02',
|
|
isCycleStart: false,
|
|
bleeding: {
|
|
value: 2,
|
|
exclude: false
|
|
}
|
|
}
|
|
|
|
return [cycleStartDay, mensesDaysAfter, notCycleStartDay]
|
|
}
|
|
|
|
const checkIsMensesStart = cycleDay => {
|
|
if (cycleDay.date === '2020-01-02') return true
|
|
}
|
|
|
|
it('sets new cycle start when first day of period deleted', () => {
|
|
const [cycleStartDay, mensesDaysAfter] = getFixtures()
|
|
|
|
maybeSetNewCycleStart({
|
|
val: deletedBleedingValue,
|
|
cycleDay: cycleStartDay,
|
|
mensesDaysAfter,
|
|
checkIsMensesStart
|
|
})
|
|
expect(cycleStartDay.isCycleStart).to.be.false()
|
|
expect(cycleStartDay.bleeding).to.be.null()
|
|
expect(mensesDaysAfter[2].isCycleStart).to.be.true()
|
|
})
|
|
|
|
it('sets new cycle start when first day of period excluded', () => {
|
|
const [cycleStartDay, mensesDaysAfter] = getFixtures()
|
|
|
|
maybeSetNewCycleStart({
|
|
val: excludedBleedingValue,
|
|
cycleDay: cycleStartDay,
|
|
mensesDaysAfter,
|
|
checkIsMensesStart
|
|
})
|
|
|
|
expect(cycleStartDay.isCycleStart).to.be.false()
|
|
expect(cycleStartDay.bleeding).to.equal(excludedBleedingValue)
|
|
expect(mensesDaysAfter[2].isCycleStart).to.be.true()
|
|
})
|
|
|
|
it('does not set new cycle start when other day of period deleted', () => {
|
|
const [cycleStartDay, mensesDaysAfter, notCycleStartDay] = getFixtures()
|
|
|
|
maybeSetNewCycleStart({
|
|
val: deletedBleedingValue,
|
|
cycleDay: notCycleStartDay,
|
|
mensesDaysAfter,
|
|
checkIsMensesStart
|
|
})
|
|
|
|
expect(cycleStartDay.isCycleStart).to.be.true()
|
|
expect(notCycleStartDay.isCycleStart).to.be.false()
|
|
expect(notCycleStartDay.bleeding).to.equal(deletedBleedingValue)
|
|
})
|
|
it('does not set new cycle start when other day of period excluded', () => {
|
|
const excludedBleedingValue = {
|
|
value: 2,
|
|
exclude: true
|
|
}
|
|
|
|
const [cycleStartDay, mensesDaysAfter, notCycleStartDay] = getFixtures()
|
|
|
|
maybeSetNewCycleStart({
|
|
val: excludedBleedingValue,
|
|
cycleDay: notCycleStartDay,
|
|
mensesDaysAfter,
|
|
checkIsMensesStart
|
|
})
|
|
|
|
expect(cycleStartDay.isCycleStart).to.be.true()
|
|
expect(notCycleStartDay.isCycleStart).to.be.false()
|
|
expect(notCycleStartDay.bleeding).to.equal(excludedBleedingValue)
|
|
})
|
|
it('works when there are no following bleeding days', () => {
|
|
const [cycleStartDay] = getFixtures()
|
|
|
|
maybeSetNewCycleStart({
|
|
val: deletedBleedingValue,
|
|
cycleDay: cycleStartDay,
|
|
mensesDaysAfter: [],
|
|
checkIsMensesStart
|
|
})
|
|
|
|
expect(cycleStartDay.isCycleStart).to.be.false()
|
|
expect(cycleStartDay.bleeding).to.equal(deletedBleedingValue)
|
|
})
|
|
}) |