Skip to content
Snippets Groups Projects
sensiplan.spec.js 3.75 KiB
Newer Older
Julia Friesel's avatar
Julia Friesel committed
import chai from 'chai'
import { detectTemperatureShift } from '../lib/sensiplan'
Julia Friesel's avatar
Julia Friesel committed

const expect = chai.expect

describe.only('sensiplan', () => {
  describe('detect temperature shift', () => {
Julia Friesel's avatar
Julia Friesel committed
    describe('regular rule', () => {
      it('reports lower temperature status before shift', function () {
        const lowerTemps = [36.7, 36.57, 36.47, 36.49, 36.57]
        const status = detectTemperatureShift(lowerTemps)
        expect(status).to.eql({ detected: false })
Julia Friesel's avatar
Julia Friesel committed
      })

      it('detects temperature shift correctly', function () {
        const tempShift = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.8]
        const status = detectTemperatureShift(tempShift)
Julia Friesel's avatar
Julia Friesel committed
        expect(status).to.eql({
          low: [36.55, 36.45, 36.5, 36.55, 36.6, 36.55],
Julia Friesel's avatar
Julia Friesel committed
          ltl: 36.6,
          high: [36.8, 36.85, 36.8],
          detected: true,
          rules: { regular: true }
Julia Friesel's avatar
Julia Friesel committed
        })
      it('detects no temperature shift when there are no 6 low temps', function () {
        const tempShift = [36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.8]
        const status = detectTemperatureShift(tempShift)
        expect(status).to.eql({ detected: false })
      })

      it('detects no temperature shift if the shift is not high enough', function () {
        const tempShift = [36.57, 36.7, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.8]
        const status = detectTemperatureShift(tempShift)
        expect(status).to.eql({ detected: false })
Julia Friesel's avatar
Julia Friesel committed
      it('detects missing temperature shift correctly', function () {
        const noTempShift = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.77]
        const status = detectTemperatureShift(noTempShift)
        expect(status).to.eql({ detected: false })
Julia Friesel's avatar
Julia Friesel committed
      })

      it('detects shift after an earlier one was invalid', function () {
        const temps = [36.4, 36.4, 36.4, 36.4, 36.4, 36.4, 36.6, 36.6, 36.4, 36.4, 36.7, 36.8, 36.9]

        const status = detectTemperatureShift(temps)
        expect(status).to.eql({
          low: [36.4, 36.4, 36.6, 36.6, 36.4, 36.4],
          ltl: 36.6,
          high: [36.7, 36.8, 36.9],
          detected: true,
          rules: { regular: true }
        })
      })

      it('detects 2 consecutive invalid shifts', function () {
        const temps = [36.4, 36.4, 36.4, 36.4, 36.4, 36.4, 36.6, 36.6, 36.4, 36.4, 36.6, 36.6, 36.7]

        const status = detectTemperatureShift(temps)
        expect(status).to.eql({ detected: false })
      })
Julia Friesel's avatar
Julia Friesel committed
    })
Julia Friesel's avatar
Julia Friesel committed
    describe('1st exception rule', () => {
      it('detects temperature shift', function () {
        const firstException = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.77, 36.63]
        const status = detectTemperatureShift(firstException)
Julia Friesel's avatar
Julia Friesel committed
        expect(status).to.eql({
          low: [36.55, 36.45, 36.5, 36.55, 36.6, 36.55],
Julia Friesel's avatar
Julia Friesel committed
          ltl: 36.6,
          high: [36.8, 36.85, 36.75, 36.65],
          detected: true,
          rules: { firstException: true }
      it('detects missing temperature shift correctly', function () {
        const firstExceptionNoShift = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.77, 36.57]
        const status = detectTemperatureShift(firstExceptionNoShift)
        expect(status).to.eql({ detected: false })
Julia Friesel's avatar
Julia Friesel committed
      })

      it('detects shift after an earlier one was invalid', function () {
        const temps = [36.4, 36.4, 36.4, 36.4, 36.4, 36.4, 36.6, 36.6, 36.4, 36.4, 36.7, 36.7, 36.7, 36.7]

        const status = detectTemperatureShift(temps)
        expect(status).to.eql({
          low: [36.4, 36.4, 36.6, 36.6, 36.4, 36.4],
          ltl: 36.6,
          high: [36.7, 36.7, 36.7, 36.7],
          detected: true,
          rules: { firstException: true }
        })
      })
Julia Friesel's avatar
Julia Friesel committed
    })
Julia Friesel's avatar
Julia Friesel committed
  })
})