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') })