Functioning 'exclude'

This commit is contained in:
Elliot DeNolf
2019-01-26 01:09:16 -05:00
parent dc79e55ffe
commit d336d7cbbd
2 changed files with 26 additions and 1 deletions

View File

@@ -42,6 +42,11 @@ describe('Param Parser', () => {
let parsed = paramParser(Page, {likes: '{gte}50{lt}100'});
expect(parsed.searchParams).toEqual({likes: {'$gte': '50', '$lt': '100'}});
});
it('Like', () => {
let parsed = paramParser(Page, {title: '{like}This'});
expect(parsed.searchParams).toEqual({title: { '$regex': 'This', '$options': '-i' }});
})
});
describe('Include', () => {
@@ -55,7 +60,20 @@ describe('Param Parser', () => {
expect(parsed.searchParams)
.toEqual({'$or':[{_id: 'SomeId'},{_id: 'SomeSecondId'}]});
});
})
});
describe('Exclude', () => {
it('Exclude Single', () => {
let parsed = paramParser(Page, {exclude: 'SomeId'});
expect(parsed.searchParams).toEqual({_id: { '$ne': 'SomeId'}});
});
it('Exclude Multiple', () => {
let parsed = paramParser(Page, {exclude: 'SomeId,SomeSecondId'});
expect(parsed.searchParams)
.toEqual({'$and':[{_id: { '$ne': 'SomeId'}},{_id: { '$ne': 'SomeSecondId'}}]});
});
});
describe('Pagination / Limits', () => {
it('Page number', () => {

View File

@@ -70,6 +70,13 @@ function parseParam(key, val, model, query) {
query = addSearchParam(query, '$or', orArray);
} else
query.searchParams['_id'] = val;
} else if (lcKey === 'exclude') {
if (val.match(',')) {
let andArray = [];
val.split(',').map(id => andArray.push({_id: {$ne: id}}));
query = addSearchParam(query, '$and', andArray);
} else
query.searchParams['_id'] = {$ne: val};
} else {
query = parseSchemaForKey(model.schema, query, '', lcKey, val, operator);
}