Skip to content

Commit 0c1c7ee

Browse files
committed
updated tests
1 parent 2e703b3 commit 0c1c7ee

File tree

1 file changed

+85
-3
lines changed

1 file changed

+85
-3
lines changed

spec/ParseQuery.hint.spec.js

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
122122
expect(queryPlanner.winningPlan.inputStage.inputStage.indexName).toBe('_id_');
123123
});
124124

125-
it_only_mongodb_version('>=5.1')('query aggregate with hint string', async () => {
125+
it_only_mongodb_version('>=5.1<5.2')('query aggregate with hint string', async () => {
126126
const object = new TestObject({ foo: 'bar' });
127127
await object.save();
128128

@@ -146,6 +146,30 @@ describe_only_db('mongo')('Parse.Query hint', () => {
146146
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.indexName).toBe('_id_');
147147
});
148148

149+
fit_only_mongodb_version('>=5.2')('query aggregate with hint string', async () => {
150+
const object = new TestObject({ foo: 'bar' });
151+
await object.save();
152+
153+
const collection = await config.database.adapter._adaptiveCollection('TestObject');
154+
let result = await collection.aggregate([{ $group: { _id: '$foo' } }], {
155+
explain: true,
156+
});
157+
let queryPlanner = result[0].queryPlanner;
158+
expect(queryPlanner.winningPlan.queryPlan.stage).toBe('GROUP');
159+
expect(queryPlanner.winningPlan.queryPlan.inputStage.stage).toBe('COLLSCAN');
160+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage).toBeUndefined();
161+
162+
result = await collection.aggregate([{ $group: { _id: '$foo' } }], {
163+
hint: '_id_',
164+
explain: true,
165+
});
166+
queryPlanner = result[0].queryPlanner;
167+
expect(queryPlanner.winningPlan.queryPlan.stage).toBe('GROUP');
168+
expect(queryPlanner.winningPlan.queryPlan.inputStage.stage).toBe('FETCH');
169+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.stage).toBe('IXSCAN');
170+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.indexName).toBe('_id_');
171+
});
172+
149173
it_only_mongodb_version('<4.4')('query aggregate with hint object', async () => {
150174
const object = new TestObject({ foo: 'bar' });
151175
await object.save();
@@ -191,7 +215,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
191215
expect(queryPlanner.winningPlan.inputStage.inputStage.keyPattern).toEqual({ _id: 1 });
192216
});
193217

194-
it_only_mongodb_version('>=5.1')('query aggregate with hint object', async () => {
218+
it_only_mongodb_version('>=5.1<5.2')('query aggregate with hint object', async () => {
195219
const object = new TestObject({ foo: 'bar' });
196220
await object.save();
197221

@@ -216,6 +240,31 @@ describe_only_db('mongo')('Parse.Query hint', () => {
216240
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.keyPattern).toEqual({ _id: 1 });
217241
});
218242

243+
it_only_mongodb_version('>=5.2')('query aggregate with hint object', async () => {
244+
const object = new TestObject({ foo: 'bar' });
245+
await object.save();
246+
247+
const collection = await config.database.adapter._adaptiveCollection('TestObject');
248+
let result = await collection.aggregate([{ $group: { _id: '$foo' } }], {
249+
explain: true,
250+
});
251+
let queryPlanner = result[0].queryPlanner;
252+
expect(queryPlanner.winningPlan.queryPlan.stage).toBe('GROUP');
253+
expect(queryPlanner.winningPlan.queryPlan.inputStage.stage).toBe('COLLSCAN');
254+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage).toBeUndefined();
255+
256+
result = await collection.aggregate([{ $group: { _id: '$foo' } }], {
257+
hint: { _id: 1 },
258+
explain: true,
259+
});
260+
queryPlanner = result[0].queryPlanner;
261+
expect(queryPlanner.winningPlan.queryPlan.stage).toBe('GROUP');
262+
expect(queryPlanner.winningPlan.queryPlan.inputStage.stage).toBe('FETCH');
263+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.stage).toBe('IXSCAN');
264+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.indexName).toBe('_id_');
265+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.keyPattern).toEqual({ _id: 1 });
266+
});
267+
219268
it_only_mongodb_version('<5.1')('query find with hint (rest)', async () => {
220269
const object = new TestObject();
221270
await object.save();
@@ -326,7 +375,7 @@ describe_only_db('mongo')('Parse.Query hint', () => {
326375
expect(queryPlanner.winningPlan.inputStage.inputStage.keyPattern).toEqual({ _id: 1 });
327376
});
328377

329-
it_only_mongodb_version('>=5.1')('query aggregate with hint (rest)', async () => {
378+
it_only_mongodb_version('>=5.1<5.2')('query aggregate with hint (rest)', async () => {
330379
const object = new TestObject({ foo: 'bar' });
331380
await object.save();
332381
let options = Object.assign({}, masterKeyOptions, {
@@ -358,4 +407,37 @@ describe_only_db('mongo')('Parse.Query hint', () => {
358407
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.indexName).toBe('_id_');
359408
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.keyPattern).toEqual({ _id: 1 });
360409
});
410+
411+
it_only_mongodb_version('>=5.2')('query aggregate with hint (rest)', async () => {
412+
const object = new TestObject({ foo: 'bar' });
413+
await object.save();
414+
let options = Object.assign({}, masterKeyOptions, {
415+
url: Parse.serverURL + '/aggregate/TestObject',
416+
qs: {
417+
explain: true,
418+
group: JSON.stringify({ objectId: '$foo' }),
419+
},
420+
});
421+
let response = await request(options);
422+
let queryPlanner = response.data.results[0].queryPlanner;
423+
expect(queryPlanner.winningPlan.queryPlan.stage).toBe('GROUP');
424+
expect(queryPlanner.winningPlan.queryPlan.inputStage.stage).toBe('COLLSCAN');
425+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage).toBeUndefined();
426+
427+
options = Object.assign({}, masterKeyOptions, {
428+
url: Parse.serverURL + '/aggregate/TestObject',
429+
qs: {
430+
explain: true,
431+
hint: '_id_',
432+
group: JSON.stringify({ objectId: '$foo' }),
433+
},
434+
});
435+
response = await request(options);
436+
queryPlanner = response.data.results[0].queryPlanner;
437+
expect(queryPlanner.winningPlan.queryPlan.stage).toBe('GROUP');
438+
expect(queryPlanner.winningPlan.queryPlan.inputStage.stage).toBe('FETCH');
439+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.stage).toBe('IXSCAN');
440+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.indexName).toBe('_id_');
441+
expect(queryPlanner.winningPlan.queryPlan.inputStage.inputStage.keyPattern).toEqual({ _id: 1 });
442+
});
361443
});

0 commit comments

Comments
 (0)