Use assert for args check

This commit is contained in:
Julia Friesel
2018-07-10 17:18:50 +02:00
parent 60c6189466
commit a1306cd7c5
2 changed files with 19 additions and 24 deletions
+12 -18
View File
@@ -2,6 +2,7 @@ import getTemperatureShift from './temperature'
import getMucusShift from './mucus'
import getPreOvulatoryPhase from './pre-ovulatory'
import { LocalDate } from 'js-joda'
import assert from 'assert'
export default function ({ cycle, previousCycle }) {
throwIfArgsAreNotInRequiredFormat(cycle, previousCycle)
@@ -70,23 +71,16 @@ export default function ({ cycle, previousCycle }) {
}
function throwIfArgsAreNotInRequiredFormat(cycle, previousCycle) {
if (!Array.isArray(cycle) || !cycle.length) throw new Error('Please provide all cycle days as array')
if (!Array.isArray(previousCycle) || !previousCycle.length) throw new Error('Please provide previous cycle days as array')
if (
!cycle[0].bleeding || typeof cycle[0].bleeding.value != 'number' ||
!previousCycle[0].bleeding || typeof previousCycle[0].bleeding.value != 'number'
) throw new Error('Cycle must start with bleeding')
if ([cycle, previousCycle].some(cycle => {
return cycle.some(day => {
if (!day.date) return true
try {
LocalDate.parse(day.date)
} catch(err) {
throw new Error('Please provide dates in ISO8601 format')
}
if (day.temperature && typeof day.temperature.value != 'number') return true
if (day.mucus && typeof day.mucus.value != 'number') return true
[cycle, previousCycle].forEach(cycle => {
assert.ok(Array.isArray(cycle))
assert.ok(cycle.length > 0)
assert.equal(typeof cycle[0].bleeding, 'object')
assert.equal(typeof cycle[0].bleeding.value, 'number')
cycle.forEach(day => {
assert.equal(typeof day.date, 'string')
assert.doesNotThrow(() => LocalDate.parse(day.date))
if (day.temperature) assert.equal(typeof day.temperature.value, 'number')
if (day.mucus) assert.equal(typeof day.mucus.value, 'number')
})
})) throw new Error('Cycle days are not in correct format')
})
}