From cdcb97fdaa8da82d4fda6b333e75e94fd0d51a06 Mon Sep 17 00:00:00 2001 From: Drew Gross Date: Thu, 2 Jun 2016 10:05:53 -0700 Subject: [PATCH] Allow installation `get` --- spec/ParseInstallation.spec.js | 47 +++++++++++++++++++++++++++------- src/Routers/ClassesRouter.js | 2 +- src/rest.js | 19 +++++++++----- 3 files changed, 52 insertions(+), 16 deletions(-) diff --git a/spec/ParseInstallation.spec.js b/spec/ParseInstallation.spec.js index f00c5be1cf..b316981131 100644 --- a/spec/ParseInstallation.spec.js +++ b/spec/ParseInstallation.spec.js @@ -2,14 +2,15 @@ // These tests check the Installations functionality of the REST API. // Ported from installation_collection_test.go -var auth = require('../src/Auth'); -var cache = require('../src/cache'); -var Config = require('../src/Config'); -var DatabaseAdapter = require('../src/DatabaseAdapter'); -var Parse = require('parse/node').Parse; -var rest = require('../src/rest'); - -var config = new Config('test'); +let auth = require('../src/Auth'); +let cache = require('../src/cache'); +let Config = require('../src/Config'); +let DatabaseAdapter = require('../src/DatabaseAdapter'); +let Parse = require('parse/node').Parse; +let rest = require('../src/rest'); +let request = require("request"); + +let config = new Config('test'); let database = DatabaseAdapter.getDatabaseConnection('test', 'test_'); let defaultColumns = require('../src/Controllers/SchemaController').defaultColumns; @@ -808,8 +809,36 @@ describe('Installations', () => { }); }); + it('allows you to get your own installation (regression test for #1718)', done => { + let installId = '12345678-abcd-abcd-abcd-123456789abc'; + let device = 'android'; + let input = { + 'installationId': installId, + 'deviceType': device + }; + rest.create(config, auth.nobody(config), '_Installation', input) + .then(createResult => { + let headers = { + 'X-Parse-Application-Id': 'test', + 'X-Parse-REST-API-Key': 'rest', + }; + request.get({ + headers: headers, + url: 'http://localhost:8378/1/installations/' + createResult.response.objectId, + json: true, + }, (error, response, body) => { + expect(body.objectId).toEqual(createResult.response.objectId); + done(); + }); + }) + .catch(error => { + console.log(error); + fail('failed'); + done(); + }); + }); + // TODO: Look at additional tests from installation_collection_test.go:882 // TODO: Do we need to support _tombstone disabling of installations? // TODO: Test deletion, badge increments - }); diff --git a/src/Routers/ClassesRouter.js b/src/Routers/ClassesRouter.js index e7bccf6648..515719a59d 100644 --- a/src/Routers/ClassesRouter.js +++ b/src/Routers/ClassesRouter.js @@ -77,7 +77,7 @@ export class ClassesRouter extends PromiseRouter { options.include = String(body.include); } - return rest.find(req.config, req.auth, req.params.className, {objectId: req.params.objectId}, options) + return rest.get(req.config, req.auth, req.params.className, req.params.objectId, options) .then((response) => { if (!response.results || response.results.length == 0) { throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Object not found.'); diff --git a/src/rest.js b/src/rest.js index d1894165a6..f7e21f9e90 100644 --- a/src/rest.js +++ b/src/rest.js @@ -17,8 +17,14 @@ var triggers = require('./triggers'); // Returns a promise for an object with optional keys 'results' and 'count'. function find(config, auth, className, restWhere, restOptions) { enforceRoleSecurity('find', className, auth); - var query = new RestQuery(config, auth, className, - restWhere, restOptions); + let query = new RestQuery(config, auth, className, restWhere, restOptions); + return query.execute(); +} + +// get is just like find but only queries an objectId. +const get = (config, auth, className, objectId, restOptions) => { + enforceRoleSecurity('get', className, auth); + let query = new RestQuery(config, auth, className, { objectId }, restOptions); return query.execute(); } @@ -128,8 +134,9 @@ function enforceRoleSecurity(method, className, auth) { } module.exports = { - create: create, - del: del, - find: find, - update: update + create, + del, + find, + get, + update };