it ('should parse query to mongoose filter successfully', () => {
let query = {
'shop_id' : '100000001',
'created_at_gte' : '2019-04-01T03:15:00.000Z',
'created_at_lte' : '2019-04-30T03:15:00.000Z',
'updated_at_from_date' : '2019-04-01T03:15:00.000Z',
'updated_at_to_date' : '2019-04-30T03:15:00.000Z',
'customer.id' : '',
'customer.name_like' : 'hoang',
'barcode' : 'HEO',
'status_in' : 'NEW,ASSIGN_EMPLOYEE',
'location_id_in' : '1000,2000',
'keyword' : '0969728159',
'page' : '2',
'limit' : '20',
'sort' : 'created_at_asc,id_desc',
'fields' : 'id,line_items,-customer',
};
let { errors, page, filter, fields, skip, limit, sort } = parse(query);
let expectedFilter = {
'shop_id' : 100000001,
'created_at' : {
$gte : '2019-04-01T03:15:00.000Z',
$lte : '2019-04-30T03:15:00.000Z'
},
'updated_at' : {
$gte : new Date(new Date('2019-04-01T03:15:00.000Z').setHours(0, 0, 0, 0)),
$lte : new Date(new Date('2019-04-30T03:15:00.000Z').setHours(23, 59, 59, 999))
},
'customer.name' : new RegExp('hoang', 'gi'),
'line_items.barcode' : 'HEO',
'status' : { $in : ['NEW', 'ASSIGN_EMPLOYEE'] },
'location_id' : { $in : [1000, 2000] },
'$or' : [
{ 'order_number' : new RegExp('0969728159', 'gi') },
{ 'customer.phone' : new RegExp('0969728159', 'gi') }
],
'is_deleted' : false
};
assert.equal(errors, null);
assert.deepEqual(filter, expectedFilter);
assert.deepEqual(fields, { id : 1, line_items : 1, customer : -1, private_field : -1 });
assert.equal(page, 2);
assert.equal(skip, 20);
assert.equal(limit, 20);
assert.deepEqual(sort, { created_at : 1, id : -1 });
});