skyderby/skyderby

View on GitHub
app/javascript/utils/pointsFilter.spec.ts

Summary

Maintainability
D
2 days
Test Coverage
import { cropPoints } from 'utils/pointsFilter'

const points = {
  none: [],
  one: [
    {
      absAltitude: 3000,
      altitude: 3000,
      gpsTime: new Date('2019-02-20T08:01:00'),
      flTime: 60,
      glideRatio: 2.0,
      distance: 0,
      hSpeed: 60,
      vSpeed: 30,
      latitude: 20.0,
      longitude: 15.0,
      speedAccuracy: 0.3,
      verticalAccuracy: 1.25
    }
  ],
  many: [
    {
      absAltitude: 4000,
      altitude: 4000,
      gpsTime: new Date('2019-02-20T08:00:00'),
      flTime: 0,
      glideRatio: 2.0,
      hSpeed: 60,
      vSpeed: 30,
      latitude: 20.0,
      longitude: 15.0,
      speedAccuracy: 0.3,
      verticalAccuracy: 1.75
    },
    {
      absAltitude: 3000,
      altitude: 3000,
      gpsTime: new Date('2019-02-20T08:01:00'),
      flTime: 60,
      glideRatio: 1.9,
      hSpeed: 80,
      vSpeed: 50,
      latitude: 25.0,
      longitude: 17.0,
      speedAccuracy: 0.3,
      verticalAccuracy: 1.25
    },
    {
      absAltitude: 2000,
      altitude: 2000,
      gpsTime: new Date('2019-02-20T08:02:00'),
      flTime: 120,
      glideRatio: 2.0,
      hSpeed: 90,
      vSpeed: 60,
      latitude: 27.0,
      longitude: 19.0,
      speedAccuracy: 0.3,
      verticalAccuracy: 1.25
    },
    {
      absAltitude: 1000,
      altitude: 1000,
      gpsTime: new Date('2019-02-20T08:03:00'),
      flTime: 180,
      glideRatio: 3.0,
      hSpeed: 40,
      vSpeed: 10,
      latitude: 28.0,
      longitude: 18.0,
      speedAccuracy: 0.3,
      verticalAccuracy: 1.25
    }
  ]
}

describe('cropping points', () => {
  it('when empty points', () => {
    expect(cropPoints(points.none, 3000, 2000)).toEqual(points.none)
  })

  it('when only one point', () => {
    expect(cropPoints(points.one, 3000, 2000)).toEqual(points.one)
  })

  it('when no need to interpolate', () => {
    expect(cropPoints(points.many, 3000, 2000)).toEqual([
      {
        absAltitude: 3000,
        altitude: 3000,
        gpsTime: new Date('2019-02-20T08:01:00'),
        flTime: 60,
        glideRatio: 1.9,
        hSpeed: 80,
        vSpeed: 50,
        latitude: 25.0,
        longitude: 17.0,
        speedAccuracy: 0.3,
        verticalAccuracy: 1.25
      },
      {
        absAltitude: 2000,
        altitude: 2000,
        gpsTime: new Date('2019-02-20T08:02:00'),
        flTime: 120,
        glideRatio: 2.0,
        hSpeed: 90,
        vSpeed: 60,
        latitude: 27.0,
        longitude: 19.0,
        speedAccuracy: 0.3,
        verticalAccuracy: 1.25
      }
    ])
  })

  it('with start point interpolation', () => {
    expect(cropPoints(points.many, 3500, 2000)).toEqual([
      {
        absAltitude: 3500,
        altitude: 3500,
        gpsTime: new Date('2019-02-20T08:00:30'),
        flTime: 30,
        glideRatio: 1.95,
        hSpeed: 70,
        vSpeed: 40,
        latitude: 22.5,
        longitude: 16.0,
        speedAccuracy: 0.3,
        verticalAccuracy: 1.5
      },
      {
        absAltitude: 3000,
        altitude: 3000,
        gpsTime: new Date('2019-02-20T08:01:00'),
        flTime: 60,
        glideRatio: 1.9,
        hSpeed: 80,
        vSpeed: 50,
        latitude: 25.0,
        longitude: 17.0,
        speedAccuracy: 0.3,
        verticalAccuracy: 1.25
      },
      {
        absAltitude: 2000,
        altitude: 2000,
        gpsTime: new Date('2019-02-20T08:02:00'),
        flTime: 120,
        glideRatio: 2.0,
        hSpeed: 90,
        vSpeed: 60,
        latitude: 27.0,
        longitude: 19.0,
        speedAccuracy: 0.3,
        verticalAccuracy: 1.25
      }
    ])
  })

  it('with end point interpolation', () => {
    expect(cropPoints(points.many, 3000, 1500)).toEqual([
      {
        absAltitude: 3000,
        altitude: 3000,
        gpsTime: new Date('2019-02-20T08:01:00'),
        flTime: 60,
        glideRatio: 1.9,
        hSpeed: 80,
        vSpeed: 50,
        latitude: 25.0,
        longitude: 17.0,
        speedAccuracy: 0.3,
        verticalAccuracy: 1.25
      },
      {
        absAltitude: 2000,
        altitude: 2000,
        gpsTime: new Date('2019-02-20T08:02:00'),
        flTime: 120,
        glideRatio: 2.0,
        hSpeed: 90,
        vSpeed: 60,
        latitude: 27.0,
        longitude: 19.0,
        speedAccuracy: 0.3,
        verticalAccuracy: 1.25
      },
      {
        absAltitude: 1500,
        altitude: 1500,
        gpsTime: new Date('2019-02-20T08:02:30'),
        flTime: 150,
        glideRatio: 2.5,
        hSpeed: 65,
        vSpeed: 35,
        latitude: 27.5,
        longitude: 18.5,
        speedAccuracy: 0.3,
        verticalAccuracy: 1.25
      }
    ])
  })
})