query-strings-parser
Version:
Middleware to transform query strings in a format that is recognized by the MongoDB, MySQL and other databases...
118 lines (96 loc) • 3.51 kB
JavaScript
const qs = require('../../index')
const expect = require('chai').expect
const request = require('supertest')
const express = require('express')
const app = express()
const custom_options = {
default: {
pagination: {
limit: 20,
skip: 0,
page: 1
},
fields: {},
sort: {},
filters: {}
},
use_page: true,
client_db: 'mongodb',
date_fields: {
start_at: 'timestamp',
end_at: 'timestamp'
}
}
app.use(qs(custom_options))
app.get('/', (req, res) => {
res.status(200).send(req.query)
})
describe('queryFilter()', function () {
context('when use custom configurations', function () {
context('when query is empty', function () {
it('should return req.query as default middleware options', function () {
return request(app)
.get('/')
.then(res => {
validate(res.body, custom_options)
})
})
})
context('when use pagination with page without define limit', function () {
it('should return pagination param with custom limit', function () {
const expect_pagination = {
limit: 20,
page: 2
}
const options = JSON.parse(JSON.stringify(custom_options))
options.default.pagination = expect_pagination
const query = '?page=2'
return request(app)
.get(query)
.then(res => {
validate(res.body, options)
})
})
})
context('when use pagination with page without define page', function () {
it('should return pagination param with default page', function () {
const expect_pagination = {
limit: 40,
page: 1
}
const options = JSON.parse(JSON.stringify(default_options))
options.default.pagination = expect_pagination
const query = '?limit=40'
return request(app)
.get(query)
.then(res => {
validate(res.body, options)
})
})
})
context('when use pagination with page and query page and limit is not a number', function () {
it('should return pagination param with default limit', function () {
const expect_pagination = {
limit: 20,
page: 1
}
const options = JSON.parse(JSON.stringify(custom_options))
options.default.pagination = expect_pagination
const query = '?page=current&limit=teen'
return request(app)
.get(query)
.then(res => {
validate(res.body, options)
})
})
})
})
})
function validate(query, options) {
expect(query).is.not.eql({})
expect(query.pagination.limit).to.eql(options.default.pagination.limit)
expect(query.pagination.page).to.eql(options.default.pagination.page)
expect(query.sort).to.eql(options.default.sort)
expect(query.fields).to.eql(options.default.fields)
expect(query.filters).to.eql(options.default.filters)
}