From 9a953a5069c20dc4971fa9dea5c0444f2ed3a74d Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Mon, 4 Nov 2019 16:42:32 -0600 Subject: [PATCH 1/3] Failing test for subclass.current() --- integration/test/ParseUserTest.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/integration/test/ParseUserTest.js b/integration/test/ParseUserTest.js index acd57a72b..63dcd3a59 100644 --- a/integration/test/ParseUserTest.js +++ b/integration/test/ParseUserTest.js @@ -630,6 +630,21 @@ describe('Parse User', () => { expect(user.get('foo')).toBe('bar'); }); + it('can get current with subclass', async () => { + Parse.User.enableUnsafeCurrentUser(); + + const customUser = new CustomUser({ foo: 'bar' }); + customUser.setUsername('username'); + customUser.setPassword('password'); + + await customUser.signUp(); + + const user = CustomUser.current(); + 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(); From d3012ae2b026181ec8bc10220429139ac2403f3a Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Mon, 4 Nov 2019 19:12:22 -0600 Subject: [PATCH 2/3] ensure subclass user class is saved to storage --- integration/test/ParseUserTest.js | 2 ++ src/ParseUser.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/integration/test/ParseUserTest.js b/integration/test/ParseUserTest.js index 63dcd3a59..60f13077a 100644 --- a/integration/test/ParseUserTest.js +++ b/integration/test/ParseUserTest.js @@ -9,6 +9,7 @@ const TestObject = Parse.Object.extend('TestObject'); class CustomUser extends Parse.User { constructor(attributes) { super(attributes); + this.className = 'CustomUser'; } doSomething() { @@ -638,6 +639,7 @@ describe('Parse User', () => { customUser.setPassword('password'); await customUser.signUp(); + Parse.User._clearCache(); const user = CustomUser.current(); expect(user instanceof CustomUser).toBe(true); diff --git a/src/ParseUser.js b/src/ParseUser.js index 3a4e318a1..a49624fcb 100644 --- a/src/ParseUser.js +++ b/src/ParseUser.js @@ -869,7 +869,7 @@ const DefaultController = { updateUserOnDisk(user) { const path = Storage.generatePath(CURRENT_USER_KEY); const json = user.toJSON(); - json.className = '_User'; + json.className = user.className || '_User'; return Storage.setItemAsync( path, JSON.stringify(json) ).then(() => { From 27213cae2dfb9192c70f324de34b41dab8558a33 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Mon, 4 Nov 2019 20:13:26 -0600 Subject: [PATCH 3/3] fix failing test --- integration/test/ParseUserTest.js | 1 - src/ParseUser.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/integration/test/ParseUserTest.js b/integration/test/ParseUserTest.js index 60f13077a..34240f88e 100644 --- a/integration/test/ParseUserTest.js +++ b/integration/test/ParseUserTest.js @@ -9,7 +9,6 @@ const TestObject = Parse.Object.extend('TestObject'); class CustomUser extends Parse.User { constructor(attributes) { super(attributes); - this.className = 'CustomUser'; } doSomething() { diff --git a/src/ParseUser.js b/src/ParseUser.js index a49624fcb..64428ab15 100644 --- a/src/ParseUser.js +++ b/src/ParseUser.js @@ -869,7 +869,7 @@ const DefaultController = { updateUserOnDisk(user) { const path = Storage.generatePath(CURRENT_USER_KEY); const json = user.toJSON(); - json.className = user.className || '_User'; + json.className = user.constructor.name === 'ParseUser' ? '_User' : user.constructor.name; return Storage.setItemAsync( path, JSON.stringify(json) ).then(() => {