sharpshark28/json-query-chain

View on GitHub
index.test.js

Summary

Maintainability
A
0 mins
Test Coverage
const Query = require('./index')
const TestData = require('./testdata.json')

test('should not modify passed data without chain alterations', () => {
  let query = new Query(TestData)
    .results

  expect(query).toMatchObject(TestData)
})

test('should paginate with default params', () => {
  let query = new Query(TestData)
    .paginate()
    .results

  expect(query.length).toBe(9)
})

test('should paginate with custom page length', () => {
  let query = new Query(TestData)
    .paginate(1, 3)
    .results

  expect(query.length).toBe(3)
  expect(query[0].name).toBe('Haynes Meadows')
})

test('should paginate to second page with custom page length', () => {
  let query = new Query(TestData)
    .paginate(2, 3)
    .results

  expect(query.length).toBe(3)
  expect(query[0].name).toBe('Howard Buckley')
})

test('should search by boolean isActive', () => {
  let query = new Query(TestData)
    .search('isActive', true)
    .results

  expect(query.length).toBe(4)
})

test('should search by name', () => {
  let query = new Query(TestData)
    .search('name', 'steele')
    .results

  expect(query.length).toBe(2)
})

test('should sort by boolean isActive', () => {
  let query = new Query(TestData)
    .sort('isActive')
    .results

  expect(query[0].name).toBe('Katelyn Steele')
})

test('should sort by number netWorth', () => {
  let query = new Query(TestData)
    .sort('netWorth')
    .results

  expect(query[0].name).toBe('Howard Buckley') // Negative
  expect(query[1].name).toBe('Natalia Petty') // 0
  expect(query[query.length - 1].name).toBe('Newman Mays') // Richest
})

test('should sort by string name', () => {
  let query = new Query(TestData)
    .sort('name')
    .results

  expect(query[0].name).toBe('Dudley Conner')
})

test('should filter', () => {
  let isAgeOver33 = a => a.age > 33

  let query = new Query(TestData)
    .filter(isAgeOver33)
    .results

  expect(query[0].name).toBe('Howard Buckley')
})

test('should filter by key', () => {
  let isNumGT33 = num => num > 33

  let query = new Query(TestData)
    .filterBy('age', isNumGT33)
    .results

  expect(query[0].name).toBe('Howard Buckley')
})

test('should chain everything together', () => {
  let query = new Query(TestData)
    .search('isActive', true)
    .sort('name')
    .paginate(1, 2)
    .results

  expect(query.length).toBe(2)
  expect(query[0].name).toBe('Dudley Conner')
  expect(query[query.length - 1].name).toBe('Haynes Meadows')
})