81 lines
2.6 KiB
JavaScript
81 lines
2.6 KiB
JavaScript
/* eslint-disable camelcase */
|
|
import mongoose from 'mongoose';
|
|
const Schema = mongoose.Schema;
|
|
import {paramParser} from '../utils/paramParser';
|
|
|
|
const PageSchema = new Schema({
|
|
title: {type: String},
|
|
content: {type: String},
|
|
slug: {type: String, unique: true, required: true},
|
|
metaTitle: String,
|
|
metaDesc: String,
|
|
likes: {type: Number}
|
|
}
|
|
);
|
|
|
|
const Page = mongoose.model('Page', PageSchema);
|
|
|
|
describe('param parser', () => {
|
|
|
|
describe('Parameter Parsing', () => {
|
|
it('No params', () => {
|
|
let parsed = paramParser(Page, {});
|
|
expect(parsed).toEqual({});
|
|
});
|
|
|
|
it('Property Equals', () => {
|
|
let parsed = paramParser(Page, {title: 'This is my title'});
|
|
expect(parsed.searchParams).toEqual({title: 'This is my title'});
|
|
});
|
|
|
|
it('Multiple params', () => {
|
|
let parsed = paramParser(Page, {title: 'This is my title', slug: 'this-is-my-title'});
|
|
expect(parsed.searchParams).toEqual({title: 'This is my title', slug: 'this-is-my-title'});
|
|
});
|
|
|
|
it('Greater than or equal', () => {
|
|
let parsed = paramParser(Page, {likes: '{gte}50'});
|
|
expect(parsed.searchParams).toEqual({likes: {'$gte': '50'}});
|
|
});
|
|
|
|
it('Greater than, less than', () => {
|
|
let parsed = paramParser(Page, {likes: '{gte}50{lt}100'});
|
|
expect(parsed.searchParams).toEqual({likes: {'$gte': '50', '$lt': '100'}});
|
|
});
|
|
});
|
|
|
|
describe('Pagination / Limits', () => {
|
|
it('Page number', () => {
|
|
let parsed = paramParser(Page, {page: '2'});
|
|
expect(parsed).toEqual({searchParams: {}, page: '2', per_page: 100, sort: false});
|
|
});
|
|
|
|
it('Page number with per page', () => {
|
|
let parsed = paramParser(Page, {page: '2', per_page: '1'});
|
|
expect(parsed).toEqual({searchParams: {}, page: '2', per_page: 1, sort: false});
|
|
});
|
|
|
|
it('Per page', () => {
|
|
let parsed = paramParser(Page, {per_page: '1'});
|
|
expect(parsed).toEqual({searchParams: {}, page: 1, per_page: 1, sort: false});
|
|
});
|
|
|
|
it('Limit', () => {
|
|
let parsed = paramParser(Page, {limit: '1'});
|
|
expect(parsed).toEqual({searchParams: {}, page: 1, per_page: 1, sort: false});
|
|
})
|
|
});
|
|
|
|
describe('Sorting', () => {
|
|
it('Sort ascending', () => {
|
|
let parsed = paramParser(Page, {sort_by: 'title'});
|
|
expect(parsed).toEqual({searchParams: {}, page: 1, per_page: 100, sort: {title: 1}});
|
|
});
|
|
|
|
it('Sort descending', () => {
|
|
let parsed = paramParser(Page, {sort_by: 'title,desc'});
|
|
expect(parsed).toEqual({searchParams: {}, page: 1, per_page: 100, sort: {title: 'desc'}});
|
|
})
|
|
});
|
|
});
|