diff --git a/integration/test/ParseUserTest.js b/integration/test/ParseUserTest.js index 1e4c7b5e1..19ceaf4b6 100644 --- a/integration/test/ParseUserTest.js +++ b/integration/test/ParseUserTest.js @@ -6,6 +6,17 @@ const Parse = require('../../node'); const TestObject = Parse.Object.extend('TestObject'); +class CustomUser extends Parse.User { + constructor(attributes) { + super(attributes); + } + + doSomething() { + return 5; + } +} +Parse.Object.registerSubclass('CustomUser', CustomUser); + describe('Parse User', () => { beforeAll(() => { Parse.initialize('integration', null, 'notsosecret'); @@ -509,4 +520,46 @@ describe('Parse User', () => { expect(error.message).toBe('Object not found.'); } }); + + it('can signUp user with subclass', async () => { + Parse.User.enableUnsafeCurrentUser(); + + const customUser = new CustomUser({ foo: 'bar' }); + customUser.setUsername('username'); + customUser.setPassword('password'); + + const user = await customUser.signUp(); + + expect(user instanceof CustomUser).toBe(true); + expect(user.doSomething()).toBe(5); + expect(user.get('foo')).toBe('bar'); + }); + + it('can logIn user with subclass', async () => { + Parse.User.enableUnsafeCurrentUser(); + + await Parse.User.signUp('username', 'password'); + + const customUser = new CustomUser({ foo: 'bar' }); + customUser.setUsername('username'); + customUser.setPassword('password'); + + const user = await customUser.logIn(); + + expect(user instanceof CustomUser).toBe(true); + expect(user.doSomething()).toBe(5); + expect(user.get('foo')).toBe('bar'); + }); + + it('can signUp / logIn user with subclass static', async () => { + Parse.User.enableUnsafeCurrentUser(); + + let user = await CustomUser.signUp('username', 'password'); + expect(user instanceof CustomUser).toBe(true); + expect(user.doSomething()).toBe(5); + + user = await CustomUser.logIn('username', 'password'); + expect(user instanceof CustomUser).toBe(true); + expect(user.doSomething()).toBe(5); + }); }); diff --git a/src/ParseUser.js b/src/ParseUser.js index f3b27e289..856606a9f 100644 --- a/src/ParseUser.js +++ b/src/ParseUser.js @@ -565,7 +565,7 @@ class ParseUser extends ParseObject { attrs = attrs || {}; attrs.username = username; attrs.password = password; - const user = new ParseUser(attrs); + const user = new this(attrs); return user.signUp({}, options); } @@ -600,7 +600,7 @@ class ParseUser extends ParseObject { ) ); } - const user = new ParseUser(); + const user = new this(); user._finishFetch({ username: username, password: password }); return user.logIn(options); }