diff --git a/spec/ParseRelation.spec.js b/spec/ParseRelation.spec.js index ae911967e4..27ce44144a 100644 --- a/spec/ParseRelation.spec.js +++ b/spec/ParseRelation.spec.js @@ -501,7 +501,7 @@ describe('Parse.Relation testing', () => { }); }); - notWorking('should properly get related objects with unfetched queries', (done) => { + it('should properly get related objects with unfetched queries', (done) => { let objects = []; let owners = []; let allObjects = []; @@ -544,7 +544,30 @@ describe('Parse.Relation testing', () => { return query.find(); }).then((results) => { expect(results.length).toBe(5); + results.forEach((result) => { + expect(result.get('key').get('even')).toBe(true); + }); + return Promise.resolve(); + }).then(() => { + console.log(''); + // Query on the relation of another owner + let object = new Parse.Object('AnotherOwner'); + object.id = anotherOwner.id; + let relationQuery = object.relation('relationKey').query(); + // Just get the even ones + relationQuery.equalTo('even', true); + // Make the query on anOwner + let query = new Parse.Query('AnOwner'); + // where key match the relation query. + query.doesNotMatchQuery('key', relationQuery); + query.include('key'); + return query.find(); + }).then((results) => { + expect(results.length).toBe(5); + results.forEach((result) => { + expect(result.get('key').get('even')).toBe(false); + }); done(); - }); + }) }); }); diff --git a/src/RestQuery.js b/src/RestQuery.js index 0ddc7b4ba7..4c5bb0b736 100644 --- a/src/RestQuery.js +++ b/src/RestQuery.js @@ -20,7 +20,6 @@ function RestQuery(config, auth, className, restWhere = {}, restOptions = {}) { this.className = className; this.restWhere = restWhere; this.response = null; - this.findOptions = {}; if (!this.auth.isMaster) { this.findOptions.acl = this.auth.user ? [this.auth.user.id] : null; @@ -205,15 +204,19 @@ RestQuery.prototype.replaceInQuery = function() { 'improper usage of $inQuery'); } + let additionalOptions = { + redirectClassNameForKey: inQueryValue.redirectClassNameForKey + }; + var subquery = new RestQuery( this.config, this.auth, inQueryValue.className, - inQueryValue.where); + inQueryValue.where, additionalOptions); return subquery.execute().then((response) => { var values = []; for (var result of response.results) { values.push({ __type: 'Pointer', - className: inQueryValue.className, + className: subquery.className, objectId: result.objectId }); } @@ -223,7 +226,6 @@ RestQuery.prototype.replaceInQuery = function() { } else { inQueryObject['$in'] = values; } - // Recurse to repeat return this.replaceInQuery(); }); @@ -246,15 +248,19 @@ RestQuery.prototype.replaceNotInQuery = function() { 'improper usage of $notInQuery'); } + let additionalOptions = { + redirectClassNameForKey: notInQueryValue.redirectClassNameForKey + }; + var subquery = new RestQuery( this.config, this.auth, notInQueryValue.className, - notInQueryValue.where); + notInQueryValue.where, additionalOptions); return subquery.execute().then((response) => { var values = []; for (var result of response.results) { values.push({ __type: 'Pointer', - className: notInQueryValue.className, + className: subquery.className, objectId: result.objectId }); } @@ -385,7 +391,6 @@ RestQuery.prototype.runFind = function() { r.className = this.redirectClassName; } } - this.response = {results: results}; }); }; @@ -423,7 +428,7 @@ RestQuery.prototype.handleInclude = function() { this.include = this.include.slice(1); return this.handleInclude(); } - + return pathResponse; };