Skip to content

Commit 103f05e

Browse files
authored
User subclass for loginWith, hydrate, me (#968)
1 parent 68dd423 commit 103f05e

File tree

2 files changed

+45
-8
lines changed

2 files changed

+45
-8
lines changed

integration/test/ParseUserTest.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,43 @@ describe('Parse User', () => {
669669
expect(user.doSomething()).toBe(5);
670670
});
671671

672+
it('can get user (me) with subclass static', async () => {
673+
Parse.User.enableUnsafeCurrentUser();
674+
675+
let user = await CustomUser.signUp('username', 'password');
676+
const token = user.getSessionToken();
677+
678+
user = await CustomUser.me(token)
679+
expect(user instanceof CustomUser).toBe(true);
680+
expect(user.doSomething()).toBe(5);
681+
});
682+
683+
it('can get hydrate user with subclass static', async () => {
684+
Parse.User.enableUnsafeCurrentUser();
685+
686+
const user = await CustomUser.hydrate({
687+
objectId: 'uid3',
688+
username: 'username',
689+
sessionToken: '123abc',
690+
});
691+
692+
expect(user instanceof CustomUser).toBe(true);
693+
expect(user.doSomething()).toBe(5);
694+
});
695+
696+
it('can loginWith subclass static', async () => {
697+
Parse.User.enableUnsafeCurrentUser();
698+
699+
let user = new CustomUser();
700+
user.setUsername('Alice');
701+
user.setPassword('sekrit');
702+
await user.signUp();
703+
user = await CustomUser.logInWith(provider.getAuthType(), provider.getAuthData());
704+
expect(user._isLinked(provider)).toBe(true);
705+
expect(user instanceof CustomUser).toBe(true);
706+
expect(user.doSomething()).toBe(5);
707+
});
708+
672709
it('can link without master key', async () => {
673710
Parse.User.enableUnsafeCurrentUser();
674711

src/ParseUser.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,8 @@ class ParseUser extends ParseObject {
687687
if (options.useMasterKey) {
688688
meOptions.useMasterKey = options.useMasterKey;
689689
}
690-
return controller.me(meOptions);
690+
const user = new this();
691+
return controller.me(user, meOptions);
691692
}
692693

693694
/**
@@ -702,15 +703,16 @@ class ParseUser extends ParseObject {
702703
*/
703704
static hydrate(userJSON: AttributeMap) {
704705
const controller = CoreManager.getUserController();
705-
return controller.hydrate(userJSON);
706+
const user = new this();
707+
return controller.hydrate(user, userJSON);
706708
}
707709

708710
/**
709711
* Static version of {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith}
710712
* @static
711713
*/
712714
static logInWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions) {
713-
const user = new ParseUser();
715+
const user = new this();
714716
return user.linkWith(provider, options, saveOpts);
715717
}
716718

@@ -845,7 +847,7 @@ class ParseUser extends ParseObject {
845847
* @static
846848
*/
847849
static _logInWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions) {
848-
const user = new ParseUser();
850+
const user = new this();
849851
return user.linkWith(provider, options, saveOpts);
850852
}
851853

@@ -1040,8 +1042,7 @@ const DefaultController = {
10401042
});
10411043
},
10421044

1043-
hydrate(userJSON: AttributeMap): Promise<ParseUser> {
1044-
const user = new ParseUser();
1045+
hydrate(user: ParseUser, userJSON: AttributeMap): Promise<ParseUser> {
10451046
user._finishFetch(userJSON);
10461047
user._setExisted(true);
10471048
if (userJSON.sessionToken && canUseCurrentUser) {
@@ -1051,12 +1052,11 @@ const DefaultController = {
10511052
}
10521053
},
10531054

1054-
me(options: RequestOptions): Promise<ParseUser> {
1055+
me(user: ParseUser, options: RequestOptions): Promise<ParseUser> {
10551056
const RESTController = CoreManager.getRESTController();
10561057
return RESTController.request(
10571058
'GET', 'users/me', {}, options
10581059
).then((response) => {
1059-
const user = new ParseUser();
10601060
user._finishFetch(response);
10611061
user._setExisted(true);
10621062
return user;

0 commit comments

Comments
 (0)