Home Reference Source Test

test/filterBuilder.test.js

import { expect } from 'chai'
import { siFilter } from '../src/spaceInvoices'

/** @test {FilterBuilder} */
describe('FilterBuilder Test', () => {
  /** @test {FilterBuilder#where} */
  it('filter eq', () => {
    let uri = siFilter()
      .where('test').eq(1)
      .buildUri('', true)

    let uriExpected = '?filter[where][test]=1'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter neq', () => {
    let uri = siFilter()
      .where('test').neq(2)
      .buildUri('', true)

    let uriExpected = '?filter[where][test][neq]=2'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter gt', () => {
    let uri = siFilter()
      .where('test').gt(3)
      .buildUri('', true)

    let uriExpected = '?filter[where][test][gt]=3'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter gte', () => {
    let uri = siFilter()
      .where('test').gte(4)
      .buildUri('', true)

    let uriExpected = '?filter[where][test][gte]=4'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter lt', () => {
    let uri = siFilter()
      .where('test').lt(5)
      .buildUri('', true)

    let uriExpected = '?filter[where][test][lt]=5'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter lte', () => {
    let uri = siFilter()
      .where('test').lte(6)
      .buildUri('', true)

    let uriExpected = '?filter[where][test][lte]=6'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter between', () => {
    let uri = siFilter()
      .where('test').between(7, 77)
      .buildUri('', true)

    let uriExpected = '?filter[where][test][between][0]=7&filter[where][test][between][1]=77'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter inq', () => {
    let uri = siFilter()
      .where('test').inq(8, 9, 10)
      .buildUri('', true)

    let uriExpected = '?filter[where][test][inq][0]=8&filter[where][test][inq][1]=9&filter[where][test][inq][2]=10'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter nin', () => {
    let uri = siFilter()
      .where('test').nin(8, 9, 10)
      .buildUri('', true)

    let uriExpected = '?filter[where][test][nin][0]=8&filter[where][test][nin][1]=9&filter[where][test][nin][2]=10'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter near', () => {
    let uri = siFilter()
      .where('test').near('153.536,-28.1', 10, 'meters')
      .buildUri('', true)

    let uriExpected = '?filter[where][test][near]=153.536,-28.1&filter[where][test][maxDistance]=10&filter[where][test][unit]=meters'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter like', () => {
    let uri = siFilter()
      .where('test').like('test*')
      .buildUri('', true)

    let uriExpected = '?filter[where][test][like]=test*'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter not like', () => {
    let uri = siFilter()
      .where('test').nlike('test*')
      .buildUri('', true)

    let uriExpected = '?filter[where][test][nlike]=test*'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter regexp', () => {
    let uri = siFilter()
      .where('test').regexp('^2018')
      .buildUri('', true)

    let uriExpected = '?filter[where][test][regexp]=^2018'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter include', () => {
    let uri = siFilter()
      .include({ i1: { i2: 'i3' } })
      .buildUri('', true)

    let uriExpected = '?filter[include][i1][i2]=i3'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter fields', () => {
    let uri = siFilter()
      .fields('f1', 'f2', 'f3')
      .buildUri('', true)

    let uriExpected = '?filter[fields][f1]=true&filter[fields][f2]=true&filter[fields][f3]=true'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter order', () => {
    let uri = siFilter()
      .order('test1', 'DESC')
      .buildUri('', true)

    let uriExpected = '?filter[order][field]=test1&filter[order][sort]=DESC'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter limit', () => {
    let uri = siFilter()
      .limit(5)
      .buildUri('', true)

    let uriExpected = '?filter[limit]=5'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter skip', () => {
    let uri = siFilter()
      .skip(10)
      .buildUri('', true)

    let uriExpected = '?filter[skip]=10'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter deleted', () => {
    let uri = siFilter()
      .deleted()
      .buildUri('', true)

    let uriExpected = '?filter[deleted]=true'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter uri with default query', () => {
    let uri = siFilter()
      .where('test').eq(1)
      .buildUri('test?myParam=true')

    let uriExpected = 'test?myParam=true&filter%5Bwhere%5D%5Btest%5D=1'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('filter uri encoded', () => {
    let uri = siFilter()
      .where('test').eq(1)
      .buildUri()

    let uriExpected = '?filter%5Bwhere%5D%5Btest%5D=1'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('long uri build with and', () => {
    let uri = siFilter()
      .where('test1').eq(1)
      .and('test2').neq(2)
      .and('test3').gt(3)
      .and('test4').gte(4)
      .and('test5').lt(5)
      .and('test6').lte(6)
      .and('test7').between(7, 77)
      .and('test8').inq(8)
      .and('test9').nin(9)
      .and('test10').near('153.536,-28.1', 10, 'meters')
      .include({ i1: { i2: 'i3' } })
      .fields('f1', 'f2', 'f3')
      .order('test1', 'DESC')
      .limit(5)
      .skip(10)
      .deleted()
      .buildUri('', true)

    let uriExpected = '?filter[where][and][0][test1]=1&filter[where][and][1][test2][neq]=2&filter[where][and][2][test3][gt]=3&filter[where][and][3][test4][gte]=4&filter[where][and][4][test5][lt]=5&filter[where][and][5][test6][lte]=6&filter[where][and][6][test7][between][0]=7&filter[where][and][6][test7][between][1]=77&filter[where][and][7][test8][inq][0]=8&filter[where][and][8][test9][nin][0]=9&filter[where][and][9][test10][near]=153.536,-28.1&filter[where][and][9][test10][maxDistance]=10&filter[where][and][9][test10][unit]=meters&filter[include][i1][i2]=i3&filter[fields][f1]=true&filter[fields][f2]=true&filter[fields][f3]=true&filter[limit]=5&filter[order][field]=test1&filter[order][sort]=DESC&filter[skip]=10&filter[deleted]=true'

    return expect(uri).to.be.equal(uriExpected)
  })

  it('long uri build with or', () => {
    let uri = siFilter()
      .where('test1').eq(1)
      .or('test2').neq(2)
      .or('test3').gt(3)
      .or('test4').gte(4)
      .or('test5').lt(5)
      .or('test6').lte(6)
      .or('test7').between(7, 77)
      .or('test8').inq(8)
      .or('test9').nin(9)
      .or('test10').near('153.536,-28.1', 10, 'meters')
      .include({ i1: { i2: 'i3' } })
      .fields('f1', 'f2', 'f3')
      .order('test1')
      .limit(5)
      .skip(10)
      .deleted()
      .buildUri('', true)

    let uriExpected = '?filter[where][or][0][test1]=1&filter[where][or][1][test2][neq]=2&filter[where][or][2][test3][gt]=3&filter[where][or][3][test4][gte]=4&filter[where][or][4][test5][lt]=5&filter[where][or][5][test6][lte]=6&filter[where][or][6][test7][between][0]=7&filter[where][or][6][test7][between][1]=77&filter[where][or][7][test8][inq][0]=8&filter[where][or][8][test9][nin][0]=9&filter[where][or][9][test10][near]=153.536,-28.1&filter[where][or][9][test10][maxDistance]=10&filter[where][or][9][test10][unit]=meters&filter[include][i1][i2]=i3&filter[fields][f1]=true&filter[fields][f2]=true&filter[fields][f3]=true&filter[limit]=5&filter[order][field]=test1&filter[order][sort]=ASC&filter[skip]=10&filter[deleted]=true'

    return expect(uri).to.be.equal(uriExpected)
  })
})