diff --git a/integration/test/ParseUserTest.js b/integration/test/ParseUserTest.js index 30e50b23f..acd57a72b 100644 --- a/integration/test/ParseUserTest.js +++ b/integration/test/ParseUserTest.js @@ -669,6 +669,43 @@ describe('Parse User', () => { expect(user.doSomething()).toBe(5); }); + it('can get user (me) with subclass static', async () => { + Parse.User.enableUnsafeCurrentUser(); + + let user = await CustomUser.signUp('username', 'password'); + const token = user.getSessionToken(); + + user = await CustomUser.me(token) + expect(user instanceof CustomUser).toBe(true); + expect(user.doSomething()).toBe(5); + }); + + it('can get hydrate user with subclass static', async () => { + Parse.User.enableUnsafeCurrentUser(); + + const user = await CustomUser.hydrate({ + objectId: 'uid3', + username: 'username', + sessionToken: '123abc', + }); + + expect(user instanceof CustomUser).toBe(true); + expect(user.doSomething()).toBe(5); + }); + + it('can loginWith subclass static', async () => { + Parse.User.enableUnsafeCurrentUser(); + + let user = new CustomUser(); + user.setUsername('Alice'); + user.setPassword('sekrit'); + await user.signUp(); + user = await CustomUser.logInWith(provider.getAuthType(), provider.getAuthData()); + expect(user._isLinked(provider)).toBe(true); + expect(user instanceof CustomUser).toBe(true); + expect(user.doSomething()).toBe(5); + }); + it('can link without master key', async () => { Parse.User.enableUnsafeCurrentUser(); diff --git a/src/ParseUser.js b/src/ParseUser.js index 406a0c709..ea49c6cba 100644 --- a/src/ParseUser.js +++ b/src/ParseUser.js @@ -687,7 +687,8 @@ class ParseUser extends ParseObject { if (options.useMasterKey) { meOptions.useMasterKey = options.useMasterKey; } - return controller.me(meOptions); + const user = new this(); + return controller.me(user, meOptions); } /** @@ -702,7 +703,8 @@ class ParseUser extends ParseObject { */ static hydrate(userJSON: AttributeMap) { const controller = CoreManager.getUserController(); - return controller.hydrate(userJSON); + const user = new this(); + return controller.hydrate(user, userJSON); } /** @@ -710,7 +712,7 @@ class ParseUser extends ParseObject { * @static */ static logInWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions) { - const user = new ParseUser(); + const user = new this(); return user.linkWith(provider, options, saveOpts); } @@ -845,7 +847,7 @@ class ParseUser extends ParseObject { * @static */ static _logInWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions) { - const user = new ParseUser(); + const user = new this(); return user.linkWith(provider, options, saveOpts); } @@ -1040,8 +1042,7 @@ const DefaultController = { }); }, - hydrate(userJSON: AttributeMap): Promise { - const user = new ParseUser(); + hydrate(user: ParseUser, userJSON: AttributeMap): Promise { user._finishFetch(userJSON); user._setExisted(true); if (userJSON.sessionToken && canUseCurrentUser) { @@ -1051,12 +1052,11 @@ const DefaultController = { } }, - me(options: RequestOptions): Promise { + me(user: ParseUser, options: RequestOptions): Promise { const RESTController = CoreManager.getRESTController(); return RESTController.request( 'GET', 'users/me', {}, options ).then((response) => { - const user = new ParseUser(); user._finishFetch(response); user._setExisted(true); return user;