diff --git a/lib/sensiplan.js b/lib/sensiplan.js index 1539f3a..a9ad09d 100644 --- a/lib/sensiplan.js +++ b/lib/sensiplan.js @@ -15,10 +15,15 @@ function getTemperatureStatus(targetDateString, previousDaysInCycle) { acc.high.push(curr) } + // regular rule // we round the difference because of JS decimal weirdness if (acc.high.length === 3 && rounded(curr - acc.ltl, 0.01) >= 0.2) { acc.shiftDetected = true } + // 1st exception rule + if (acc.high.length === 4 && curr > acc.ltl) { + acc.shiftDetected = true + } return acc }, { diff --git a/test/fixtures/first-exception-rule.json b/test/fixtures/first-exception-rule.json new file mode 100644 index 0000000..2b963ef --- /dev/null +++ b/test/fixtures/first-exception-rule.json @@ -0,0 +1,67 @@ +[{ + "date": "2018-06-04", + "temperature": { + "value": 36.7, + "exclude": null + } +}, { + "date": "2018-06-05", + "temperature": { + "value": 36.57, + "exclude": null + } +}, { + "date": "2018-06-06", + "temperature": { + "value": 36.47, + "exclude": null + } +}, { + "date": "2018-06-07", + "temperature": { + "value": 36.49, + "exclude": null + } +}, { + "date": "2018-06-09", + "temperature": { + "value": 36.57, + "exclude": null + } +}, { + "date": "2018-06-10", + "temperature": { + "value": 36.62, + "exclude": null + } +}, { + "date": "2018-06-11", + "temperature": { + "value": 36.55, + "exclude": null + } +}, { + "date": "2018-06-12", + "temperature": { + "value": 36.8, + "exclude": null + } +}, { + "date": "2018-06-13", + "temperature": { + "value": 36.86, + "exclude": null + } +}, { + "date": "2018-06-14", + "temperature": { + "value": 36.77, + "exclude": null + } +}, { + "date": "2018-06-15", + "temperature": { + "value": 36.63, + "exclude": null + } +}] \ No newline at end of file diff --git a/test/fixtures/temp-shift.json b/test/fixtures/regular-rule.json similarity index 100% rename from test/fixtures/temp-shift.json rename to test/fixtures/regular-rule.json diff --git a/test/sensiplan.spec.js b/test/sensiplan.spec.js index 3ca639e..25ab34e 100644 --- a/test/sensiplan.spec.js +++ b/test/sensiplan.spec.js @@ -1,7 +1,8 @@ import chai from 'chai' import { getTemperatureStatus } from '../lib/sensiplan' -import tempShift from './fixtures/temp-shift.json' +import tempShift from './fixtures/regular-rule.json' import lowerTempDays from './fixtures/lower-temps.json' +import firstException from './fixtures/first-exception-rule.json' const expect = chai.expect @@ -17,7 +18,7 @@ describe.only('sensiplan', () => { }) }) - it('detects temperature shift', function () { + it('detects temperature shift according to regular rule', function () { const status = getTemperatureStatus('2018-06-14', tempShift) expect(status).to.eql({ low: [36.7, 36.55, 36.45, 36.5, 36.55, 36.6, 36.55], @@ -26,5 +27,15 @@ describe.only('sensiplan', () => { shiftDetected: true }) }) + + it('detects temperature shift according to 1st exception rule', function () { + const status = getTemperatureStatus('2018-06-14', firstException) + expect(status).to.eql({ + low: [36.7, 36.55, 36.45, 36.5, 36.55, 36.6, 36.55], + ltl: 36.6, + high: [36.8, 36.85, 36.75, 36.65], + shiftDetected: true + }) + }) }) }) \ No newline at end of file