From a1306cd7c5ec124ad161771bd59fc2dcdd6afed9 Mon Sep 17 00:00:00 2001
From: Julia Friesel <julia.friesel@gmail.com>
Date: Tue, 10 Jul 2018 17:18:50 +0200
Subject: [PATCH] Use assert for args check

---
 lib/sympto/index.js       | 30 ++++++++++++------------------
 test/sympto/index.spec.js | 13 +++++++------
 2 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/lib/sympto/index.js b/lib/sympto/index.js
index 291c378b..6a9f66a3 100644
--- a/lib/sympto/index.js
+++ b/lib/sympto/index.js
@@ -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')
+  })
 }
\ No newline at end of file
diff --git a/test/sympto/index.spec.js b/test/sympto/index.spec.js
index 6bc56e7a..5a9bc383 100644
--- a/test/sympto/index.spec.js
+++ b/test/sympto/index.spec.js
@@ -1,5 +1,6 @@
 import chai from 'chai'
 import getSensiplanStatus from '../../lib/sympto'
+import { AssertionError } from 'assert'
 import {
   cycleWithoutTempShift,
   cycleWithTempAndMucusShift,
@@ -141,10 +142,10 @@ describe('sympto', () => {
   describe('when args are wrong', () => {
     it('throws when arg object is not in right format', () => {
       const wrongObject = { hello: 'world' }
-      expect(() => getSensiplanStatus(wrongObject)).to.throw('cycle days as array')
+      expect(() => getSensiplanStatus(wrongObject)).to.throw(AssertionError)
     })
     it('throws if cycle array is empty', () => {
-      expect(() => getSensiplanStatus({cycle: []})).to.throw('cycle days as array')
+      expect(() => getSensiplanStatus({cycle: []})).to.throw(AssertionError)
     })
     it('throws if cycle days are not in right format', () => {
       expect(() => getSensiplanStatus({
@@ -156,7 +157,7 @@ describe('sympto', () => {
           date: '1992-09-09',
           bleeding: { value: 0 }
         }]
-      })).to.throw('correct format')
+      })).to.throw(AssertionError)
       expect(() => getSensiplanStatus({
         cycle: [{
           date: '2018-04-13',
@@ -167,7 +168,7 @@ describe('sympto', () => {
           date: '1992-09-09',
           bleeding: { value: 0 }
         }]
-      })).to.throw('correct format')
+      })).to.throw(AssertionError)
       expect(() => getSensiplanStatus({
         cycle: [{
           date: '09-14-2017',
@@ -177,7 +178,7 @@ describe('sympto', () => {
           date: '1992-09-09',
           bleeding: { value: 0 }
         }]
-      })).to.throw('ISO')
+      })).to.throw(AssertionError)
     })
     it('throws if first cycle day does not have bleeding value', () => {
       expect(() => getSensiplanStatus({
@@ -192,7 +193,7 @@ describe('sympto', () => {
             date: '2017-09-23',
           }
         ]
-      })).to.throw('start with bleeding')
+      })).to.throw(AssertionError)
     })
   })
 })
\ No newline at end of file
-- 
GitLab