const DatabaseController = require('../lib/Controllers/DatabaseController.js'); const validateQuery = DatabaseController._validateQuery; describe('DatabaseController', function() { describe('validateQuery', function() { it('should restructure simple cases of SERVER-13732', done => { const query = { $or: [{ a: 1 }, { a: 2 }], _rperm: { $in: ['a', 'b'] }, foo: 3, }; validateQuery(query); expect(query).toEqual({ $or: [ { a: 1, _rperm: { $in: ['a', 'b'] }, foo: 3 }, { a: 2, _rperm: { $in: ['a', 'b'] }, foo: 3 }, ], }); done(); }); it('should not restructure SERVER-13732 queries with $nears', done => { let query = { $or: [{ a: 1 }, { b: 1 }], c: { $nearSphere: {} } }; validateQuery(query); expect(query).toEqual({ $or: [{ a: 1 }, { b: 1 }], c: { $nearSphere: {} }, }); query = { $or: [{ a: 1 }, { b: 1 }], c: { $near: {} } }; validateQuery(query); expect(query).toEqual({ $or: [{ a: 1 }, { b: 1 }], c: { $near: {} } }); done(); }); it('should push refactored keys down a tree for SERVER-13732', done => { const query = { a: 1, $or: [{ $or: [{ b: 1 }, { b: 2 }] }, { $or: [{ c: 1 }, { c: 2 }] }], }; validateQuery(query); expect(query).toEqual({ $or: [ { $or: [{ b: 1, a: 1 }, { b: 2, a: 1 }] }, { $or: [{ c: 1, a: 1 }, { c: 2, a: 1 }] }, ], }); done(); }); it('should reject invalid queries', done => { expect(() => validateQuery({ $or: { a: 1 } })).toThrow(); done(); }); it('should accept valid queries', done => { expect(() => validateQuery({ $or: [{ a: 1 }, { b: 2 }] })).not.toThrow(); done(); }); }); });