Skip to content

Commit b3f867f

Browse files
authored
Add options for AnonymousUtils (#860)
* Add options for AnonymousUtils * add more tests
1 parent 93c0538 commit b3f867f

File tree

4 files changed

+83
-17
lines changed

4 files changed

+83
-17
lines changed

integration/test/ParseUserTest.js

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,6 @@ describe('Parse User', () => {
536536
Parse.User.enableUnsafeCurrentUser();
537537

538538
await Parse.User.signUp('foobaz', '1234');
539-
await Parse.User.logOut();
540539

541540
const user = await Parse.AnonymousUtils.logIn();
542541
user.set('field', 'hello world');
@@ -552,6 +551,71 @@ describe('Parse User', () => {
552551
}
553552
});
554553

554+
it('anonymous user logIn does not use currentUser sessionToken', async () => {
555+
Parse.User.enableUnsafeCurrentUser();
556+
557+
const user1 = await Parse.User.signUp('anon-not', '1234');
558+
const user2 = await Parse.AnonymousUtils.logIn();
559+
expect(user1.getSessionToken()).toBeDefined();
560+
expect(user2.getSessionToken()).toBeDefined();
561+
expect(user1.getSessionToken()).not.toBe(user2.getSessionToken());
562+
});
563+
564+
it('anonymous user link currentUser', async () => {
565+
Parse.User.enableUnsafeCurrentUser();
566+
567+
const user1 = await Parse.User.signUp('anon-not', '1234');
568+
const user2 = await Parse.AnonymousUtils.link(user1);
569+
expect(user1.getSessionToken()).toBeDefined();
570+
expect(user2.getSessionToken()).toBeDefined();
571+
expect(user1.getSessionToken()).toBe(user2.getSessionToken());
572+
});
573+
574+
it('anonymous user link does not use currentUser sessionToken', async () => {
575+
Parse.User.enableUnsafeCurrentUser();
576+
577+
const user1 = await Parse.User.signUp('anon-not', '1234');
578+
const user2 = new Parse.User();
579+
await Parse.AnonymousUtils.link(user2);
580+
expect(user1.getSessionToken()).toBeDefined();
581+
expect(user2.getSessionToken()).toBeDefined();
582+
expect(user1.getSessionToken()).not.toBe(user2.getSessionToken());
583+
});
584+
585+
it('facebook logIn does not use currentUser sessionToken', async () => {
586+
Parse.User.enableUnsafeCurrentUser();
587+
Parse.FacebookUtils.init();
588+
589+
const user1 = await Parse.User.signUp('facebook-not', '1234');
590+
const user2 = await Parse.FacebookUtils.logIn();
591+
expect(user1.getSessionToken()).toBeDefined();
592+
expect(user2.getSessionToken()).toBeDefined();
593+
expect(user1.getSessionToken()).not.toBe(user2.getSessionToken());
594+
});
595+
596+
it('facebook link currentUser', async () => {
597+
Parse.User.enableUnsafeCurrentUser();
598+
Parse.FacebookUtils.init();
599+
600+
const user1 = await Parse.User.signUp('facebook-not', '1234');
601+
const user2 = await Parse.FacebookUtils.link(user1);
602+
expect(user1.getSessionToken()).toBeDefined();
603+
expect(user2.getSessionToken()).toBeDefined();
604+
expect(user1.getSessionToken()).toBe(user2.getSessionToken());
605+
});
606+
607+
it('facebook link does not use currentUser sessionToken', async () => {
608+
Parse.User.enableUnsafeCurrentUser();
609+
Parse.FacebookUtils.init();
610+
611+
const user1 = await Parse.User.signUp('facebook-not', '1234');
612+
const user2 = new Parse.User();
613+
await Parse.FacebookUtils.link(user2);
614+
expect(user1.getSessionToken()).toBeDefined();
615+
expect(user2.getSessionToken()).toBeDefined();
616+
expect(user1.getSessionToken()).not.toBe(user2.getSessionToken());
617+
});
618+
555619
it('can signUp user with subclass', async () => {
556620
Parse.User.enableUnsafeCurrentUser();
557621

@@ -649,15 +713,13 @@ describe('Parse User', () => {
649713
expect(loggedIn.authenticated()).toBeTruthy();
650714
});
651715

652-
it('linking un-authenticated user without master key will throw', async (done) => {
716+
it('can linking un-authenticated user without master key', async () => {
653717
const user = new Parse.User();
654718
user.setUsername('Alice');
655719
user.setPassword('sekrit');
656720
await user.save(null, { useMasterKey: true });
657-
user._linkWith(provider.getAuthType(), provider.getAuthData())
658-
.then(() => done.fail('should fail'))
659-
.catch(e => expect(e.message).toBe(`Cannot modify user ${user.id}.`))
660-
.then(done);
721+
await user._linkWith(provider.getAuthType(), provider.getAuthData());
722+
expect(user.getSessionToken()).toBeDefined();
661723
});
662724

663725
it('can link with custom auth', async () => {

src/AnonymousUtils.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*/
1111
import ParseUser from './ParseUser';
1212
const uuidv4 = require('uuid/v4');
13+
import type { RequestOptions } from './RESTController';
1314

1415
let registered = false;
1516

@@ -62,12 +63,13 @@ const AnonymousUtils = {
6263
*
6364
* @method logIn
6465
* @name Parse.AnonymousUtils.logIn
66+
* @param {Object} options MasterKey / SessionToken.
6567
* @returns {Promise}
6668
* @static
6769
*/
68-
logIn() {
70+
logIn(options?: RequestOptions) {
6971
const provider = this._getAuthProvider();
70-
return ParseUser._logInWith(provider.getAuthType(), provider.getAuthData());
72+
return ParseUser._logInWith(provider.getAuthType(), provider.getAuthData(), options);
7173
},
7274

7375
/**
@@ -76,12 +78,13 @@ const AnonymousUtils = {
7678
* @method link
7779
* @name Parse.AnonymousUtils.link
7880
* @param {Parse.User} user User to link. This must be the current user.
81+
* @param {Object} options MasterKey / SessionToken.
7982
* @returns {Promise}
8083
* @static
8184
*/
82-
link(user: ParseUser) {
85+
link(user: ParseUser, options?: RequestOptions) {
8386
const provider = this._getAuthProvider();
84-
return user._linkWith(provider.getAuthType(), provider.getAuthData());
87+
return user._linkWith(provider.getAuthType(), provider.getAuthData(), options);
8588
},
8689

8790
_getAuthProvider() {

src/ParseUser.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ class ParseUser extends ParseObject {
7777
* Unlike in the Android/iOS SDKs, logInWith is unnecessary, since you can
7878
* call linkWith on the user (even if it doesn't exist yet on the server).
7979
*/
80-
_linkWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions): Promise<ParseUser> {
80+
_linkWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions = {}): Promise<ParseUser> {
81+
saveOpts.sessionToken = saveOpts.sessionToken || this.getSessionToken() || '';
8182
let authType;
8283
if (typeof provider === 'string') {
8384
authType = provider;
@@ -685,8 +686,8 @@ class ParseUser extends ParseObject {
685686
return controller.hydrate(userJSON);
686687
}
687688

688-
static logInWith(provider: any, options?: RequestOptions) {
689-
return ParseUser._logInWith(provider, options);
689+
static logInWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions) {
690+
return ParseUser._logInWith(provider, options, saveOpts);
690691
}
691692

692693
/**
@@ -804,9 +805,9 @@ class ParseUser extends ParseObject {
804805
});
805806
}
806807

807-
static _logInWith(provider: any, options?: RequestOptions) {
808+
static _logInWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions) {
808809
const user = new ParseUser();
809-
return user._linkWith(provider, options);
810+
return user._linkWith(provider, options, saveOpts);
810811
}
811812

812813
static _clearCache() {

src/__tests__/AnonymousUtils-test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,15 @@ describe('AnonymousUtils', () => {
7474
jest.spyOn(user, '_linkWith');
7575
AnonymousUtils.link(user);
7676
expect(user._linkWith).toHaveBeenCalledTimes(1);
77-
expect(user._linkWith).toHaveBeenCalledWith('anonymous', mockProvider.getAuthData());
77+
expect(user._linkWith).toHaveBeenCalledWith('anonymous', mockProvider.getAuthData(), undefined);
7878
expect(AnonymousUtils._getAuthProvider).toHaveBeenCalledTimes(1);
7979
});
8080

8181
it('can login user', () => {
8282
jest.spyOn(MockUser, '_logInWith');
8383
AnonymousUtils.logIn();
8484
expect(MockUser._logInWith).toHaveBeenCalledTimes(1);
85-
expect(MockUser._logInWith).toHaveBeenCalledWith('anonymous', mockProvider.getAuthData());
85+
expect(MockUser._logInWith).toHaveBeenCalledWith('anonymous', mockProvider.getAuthData(), undefined);
8686
expect(AnonymousUtils._getAuthProvider).toHaveBeenCalledTimes(1);
8787
});
8888
});

0 commit comments

Comments
 (0)