111 lines
2.5 KiB
JavaScript
111 lines
2.5 KiB
JavaScript
const Query = require('./index')
|
|
const fs = require('fs')
|
|
|
|
const TestData = JSON.parse(fs.readFileSync('./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')
|
|
})
|