@@ -904,6 +904,50 @@ describe('Parse.User testing', () => {
904
904
}
905
905
} ;
906
906
} ;
907
+
908
+ var getMockMyOauthProvider = function ( ) {
909
+ return {
910
+ authData : {
911
+ id : "12345" ,
912
+ access_token : "12345" ,
913
+ expiration_date : new Date ( ) . toJSON ( ) ,
914
+ } ,
915
+ shouldError : false ,
916
+ loggedOut : false ,
917
+ synchronizedUserId : null ,
918
+ synchronizedAuthToken : null ,
919
+ synchronizedExpiration : null ,
920
+
921
+ authenticate : function ( options ) {
922
+ if ( this . shouldError ) {
923
+ options . error ( this , "An error occurred" ) ;
924
+ } else if ( this . shouldCancel ) {
925
+ options . error ( this , null ) ;
926
+ } else {
927
+ options . success ( this , this . authData ) ;
928
+ }
929
+ } ,
930
+ restoreAuthentication : function ( authData ) {
931
+ if ( ! authData ) {
932
+ this . synchronizedUserId = null ;
933
+ this . synchronizedAuthToken = null ;
934
+ this . synchronizedExpiration = null ;
935
+ return true ;
936
+ }
937
+ this . synchronizedUserId = authData . id ;
938
+ this . synchronizedAuthToken = authData . access_token ;
939
+ this . synchronizedExpiration = authData . expiration_date ;
940
+ return true ;
941
+ } ,
942
+ getAuthType : function ( ) {
943
+ return "myoauth" ;
944
+ } ,
945
+ deauthenticate : function ( ) {
946
+ this . loggedOut = true ;
947
+ this . restoreAuthentication ( null ) ;
948
+ }
949
+ } ;
950
+ } ;
907
951
908
952
var ExtendedUser = Parse . User . extend ( {
909
953
extended : function ( ) {
@@ -1284,6 +1328,114 @@ describe('Parse.User testing', () => {
1284
1328
}
1285
1329
} ) ;
1286
1330
} ) ;
1331
+
1332
+ it ( "link multiple providers" , ( done ) => {
1333
+ var provider = getMockFacebookProvider ( ) ;
1334
+ var mockProvider = getMockMyOauthProvider ( ) ;
1335
+ Parse . User . _registerAuthenticationProvider ( provider ) ;
1336
+ Parse . User . _logInWith ( "facebook" , {
1337
+ success : function ( model ) {
1338
+ ok ( model instanceof Parse . User , "Model should be a Parse.User" ) ;
1339
+ strictEqual ( Parse . User . current ( ) , model ) ;
1340
+ ok ( model . extended ( ) , "Should have used the subclass." ) ;
1341
+ strictEqual ( provider . authData . id , provider . synchronizedUserId ) ;
1342
+ strictEqual ( provider . authData . access_token , provider . synchronizedAuthToken ) ;
1343
+ strictEqual ( provider . authData . expiration_date , provider . synchronizedExpiration ) ;
1344
+ ok ( model . _isLinked ( "facebook" ) , "User should be linked to facebook" ) ;
1345
+ Parse . User . _registerAuthenticationProvider ( mockProvider ) ;
1346
+ let objectId = model . id ;
1347
+ model . _linkWith ( "myoauth" , {
1348
+ success : function ( model ) {
1349
+ expect ( model . id ) . toEqual ( objectId ) ;
1350
+ ok ( model . _isLinked ( "facebook" ) , "User should be linked to facebook" ) ;
1351
+ ok ( model . _isLinked ( "myoauth" ) , "User should be linked to myoauth" ) ;
1352
+ done ( ) ;
1353
+ } ,
1354
+ error : function ( error ) {
1355
+ console . error ( error ) ;
1356
+ fail ( 'SHould not fail' ) ;
1357
+ done ( ) ;
1358
+ }
1359
+ } )
1360
+ } ,
1361
+ error : function ( model , error ) {
1362
+ ok ( false , "linking should have worked" ) ;
1363
+ done ( ) ;
1364
+ }
1365
+ } ) ;
1366
+ } ) ;
1367
+
1368
+ it ( "link multiple providers and update token" , ( done ) => {
1369
+ var provider = getMockFacebookProvider ( ) ;
1370
+ var mockProvider = getMockMyOauthProvider ( ) ;
1371
+ Parse . User . _registerAuthenticationProvider ( provider ) ;
1372
+ Parse . User . _logInWith ( "facebook" , {
1373
+ success : function ( model ) {
1374
+ ok ( model instanceof Parse . User , "Model should be a Parse.User" ) ;
1375
+ strictEqual ( Parse . User . current ( ) , model ) ;
1376
+ ok ( model . extended ( ) , "Should have used the subclass." ) ;
1377
+ strictEqual ( provider . authData . id , provider . synchronizedUserId ) ;
1378
+ strictEqual ( provider . authData . access_token , provider . synchronizedAuthToken ) ;
1379
+ strictEqual ( provider . authData . expiration_date , provider . synchronizedExpiration ) ;
1380
+ ok ( model . _isLinked ( "facebook" ) , "User should be linked to facebook" ) ;
1381
+ Parse . User . _registerAuthenticationProvider ( mockProvider ) ;
1382
+ let objectId = model . id ;
1383
+ model . _linkWith ( "myoauth" , {
1384
+ success : function ( model ) {
1385
+ expect ( model . id ) . toEqual ( objectId ) ;
1386
+ ok ( model . _isLinked ( "facebook" ) , "User should be linked to facebook" ) ;
1387
+ ok ( model . _isLinked ( "myoauth" ) , "User should be linked to myoauth" ) ;
1388
+ model . _linkWith ( "facebook" , {
1389
+ success : ( ) => {
1390
+ ok ( model . _isLinked ( "facebook" ) , "User should be linked to facebook" ) ;
1391
+ ok ( model . _isLinked ( "myoauth" ) , "User should be linked to myoauth" ) ;
1392
+ done ( ) ;
1393
+ } ,
1394
+ error : ( ) => {
1395
+ fail ( 'should link again' ) ;
1396
+ done ( ) ;
1397
+ }
1398
+ } )
1399
+ } ,
1400
+ error : function ( error ) {
1401
+ console . error ( error ) ;
1402
+ fail ( 'SHould not fail' ) ;
1403
+ done ( ) ;
1404
+ }
1405
+ } )
1406
+ } ,
1407
+ error : function ( model , error ) {
1408
+ ok ( false , "linking should have worked" ) ;
1409
+ done ( ) ;
1410
+ }
1411
+ } ) ;
1412
+ } ) ;
1413
+
1414
+ it ( 'should fail linking with existing' , ( done ) => {
1415
+ var provider = getMockFacebookProvider ( ) ;
1416
+ Parse . User . _registerAuthenticationProvider ( provider ) ;
1417
+ Parse . User . _logInWith ( "facebook" , {
1418
+ success : function ( model ) {
1419
+ Parse . User . logOut ( ) . then ( ( ) => {
1420
+ let user = new Parse . User ( ) ;
1421
+ user . setUsername ( 'user' ) ;
1422
+ user . setPassword ( 'password' ) ;
1423
+ return user . signUp ( ) . then ( ( ) => {
1424
+ // try to link here
1425
+ user . _linkWith ( 'facebook' , {
1426
+ success : ( ) => {
1427
+ fail ( 'should not succeed' ) ;
1428
+ done ( ) ;
1429
+ } ,
1430
+ error : ( err ) => {
1431
+ done ( ) ;
1432
+ }
1433
+ } ) ;
1434
+ } ) ;
1435
+ } ) ;
1436
+ }
1437
+ } ) ;
1438
+ } ) ;
1287
1439
1288
1440
it ( 'set password then change password' , ( done ) => {
1289
1441
Parse . User . signUp ( 'bob' , 'barker' ) . then ( ( bob ) => {
0 commit comments