diff --git a/spec/ParseUser.spec.js b/spec/ParseUser.spec.js index 51eae6ca4d..0e5f3a78ee 100644 --- a/spec/ParseUser.spec.js +++ b/spec/ParseUser.spec.js @@ -82,8 +82,6 @@ describe('Parse.User testing', () => { }); it("user login with files", (done) => { - "use strict"; - let file = new Parse.File("yolo.txt", [1,2,3], "text/plain"); file.save().then((file) => { return Parse.User.signUp("asdf", "zxcv", { "file" : file }); @@ -930,6 +928,29 @@ describe('Parse.User testing', () => { }); }); + it('log in with provider with files', done => { + let provider = getMockFacebookProvider(); + Parse.User._registerAuthenticationProvider(provider); + let file = new Parse.File("yolo.txt", [1, 2, 3], "text/plain"); + file.save().then(file => { + let user = new Parse.User(); + user.set('file', file); + return user._linkWith('facebook', {}); + }).then(user => { + expect(user._isLinked("facebook")).toBeTruthy(); + return Parse.User._logInWith('facebook', {}); + }).then(user => { + let fileAgain = user.get('file'); + expect(fileAgain.name()).toMatch(/yolo.txt$/); + expect(fileAgain.url()).toMatch(/yolo.txt$/); + }).then(() => { + done(); + }, error => { + fail(error); + done(); + }); + }); + it("log in with provider twice", (done) => { var provider = getMockFacebookProvider(); Parse.User._registerAuthenticationProvider(provider); diff --git a/src/RestWrite.js b/src/RestWrite.js index ed336cace5..2f6d88bab5 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -73,6 +73,8 @@ RestWrite.prototype.execute = function() { return this.validateAuthData(); }).then(() => { return this.transformUser(); + }).then(() => { + return this.expandFilesForExistingObjects(); }).then(() => { return this.runDatabaseOperation(); }).then(() => { @@ -704,6 +706,16 @@ RestWrite.prototype.handleInstallation = function() { return promise; }; +// If we short-circuted the object response - then we need to make sure we expand all the files, +// since this might not have a query, meaning it won't return the full result back. +// TODO: (nlutsenko) This should die when we move to per-class based controllers on _Session/_User +RestWrite.prototype.expandFilesForExistingObjects = function() { + // Check whether we have a short-circuited response - only then run expansion. + if (this.response && this.response.response) { + this.config.filesController.expandFilesInObject(this.config, this.response.response); + } +}; + RestWrite.prototype.runDatabaseOperation = function() { if (this.response) { return;