From fd375cb927b108fe2f49b6a65902c9079b20f526 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sun, 16 Apr 2017 11:44:41 -0400 Subject: [PATCH] Fixes issue affecting queries on Pointer arrays (#3721) * Transform array atoms on equality * nits --- spec/ParseQuery.spec.js | 31 ++++++++++++++++++++ src/Adapters/Storage/Mongo/MongoTransform.js | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/spec/ParseQuery.spec.js b/spec/ParseQuery.spec.js index 1cbe41db..9d27f302 100644 --- a/spec/ParseQuery.spec.js +++ b/spec/ParseQuery.spec.js @@ -2750,4 +2750,35 @@ describe('Parse.Query testing', () => { done(); }) }); + + it('should not depend on parameter order #3169', function(done) { + const score1 = new Parse.Object('Score', {scoreId: '1'}); + const score2 = new Parse.Object('Score', {scoreId: '2'}); + const game1 = new Parse.Object('Game', {gameId: '1'}); + const game2 = new Parse.Object('Game', {gameId: '2'}); + Parse.Object.saveAll([score1, score2, game1, game2]).then(() => { + game1.set('score', [score1]); + game2.set('score', [score2]); + return Parse.Object.saveAll([game1, game2]); + }).then(() => { + const where = { + score: { + objectId: score1.id, + className: 'Score', + __type: 'Pointer', + } + } + return require('request-promise').post({ + url: Parse.serverURL + "/classes/Game", + json: { where, "_method": "GET" }, + headers: { + 'X-Parse-Application-Id': Parse.applicationId, + 'X-Parse-Javascript-Key': Parse.javaScriptKey + } + }); + }).then((response) => { + expect(response.results.length).toBe(1); + done(); + }, done.fail); + }); }); diff --git a/src/Adapters/Storage/Mongo/MongoTransform.js b/src/Adapters/Storage/Mongo/MongoTransform.js index 63647e03..39f31324 100644 --- a/src/Adapters/Storage/Mongo/MongoTransform.js +++ b/src/Adapters/Storage/Mongo/MongoTransform.js @@ -232,7 +232,7 @@ function transformQueryKeyValue(className, key, value, schema) { } if (expectedTypeIsArray && !(value instanceof Array)) { - return {key, value: { '$all' : [value] }}; + return {key, value: { '$all' : [transformInteriorAtom(value)] }}; } // Handle atomic values