Let auth data be updated on login (#2219)

* Let user update authData token upon login

* Adds tests that ensures linked authData isnt overriden

* fixes focused testing problem
This commit is contained in:
Florent Vilmart
2016-07-09 00:49:46 -04:00
committed by Drew
parent 4e9e817a80
commit 61aa5a8d62
3 changed files with 122 additions and 11 deletions

View File

@@ -907,13 +907,11 @@ describe('Parse.User testing', () => {
}));
});
// Note that this mocks out client-side Facebook action rather than
// server-side.
var getMockFacebookProvider = function() {
var getMockFacebookProviderWithIdToken = function(id, token) {
return {
authData: {
id: "8675309",
access_token: "jenny",
id: id,
access_token: token,
expiration_date: new Date().toJSON(),
},
shouldError: false,
@@ -951,6 +949,12 @@ describe('Parse.User testing', () => {
this.restoreAuthentication(null);
}
};
}
// Note that this mocks out client-side Facebook action rather than
// server-side.
var getMockFacebookProvider = function() {
return getMockFacebookProviderWithIdToken('8675309', 'jenny');
};
var getMockMyOauthProvider = function() {
@@ -1025,6 +1029,40 @@ describe('Parse.User testing', () => {
});
});
it_exclude_dbs(['postgres'])("log in with provider and update token", (done) => {
var provider = getMockFacebookProvider();
var secondProvider = getMockFacebookProviderWithIdToken('8675309', 'jenny_valid_token');
var errorHandler = function(err) {
fail('should not fail');
done();
}
Parse.User._registerAuthenticationProvider(provider);
Parse.User._logInWith("facebook", {
success: (model) => {
Parse.User._registerAuthenticationProvider(secondProvider);
return Parse.User.logOut().then(() => {
Parse.User._logInWith("facebook", {
success: (model) => {
expect(secondProvider.synchronizedAuthToken).toEqual('jenny_valid_token');
// Make sure we can login with the new token again
Parse.User.logOut().then(() => {
Parse.User._logInWith("facebook", {
success: done,
error: errorHandler
});
});
},
error: errorHandler
});
})
},
error: errorHandler
}).catch((err) => {
errorHandler(err);
done();
});
});
it_exclude_dbs(['postgres'])('returns authData when authed and logged in with provider (regression test for #1498)', done => {
Parse.Object.enableSingleInstance();
let provider = getMockFacebookProvider();
@@ -1428,6 +1466,47 @@ describe('Parse.User testing', () => {
});
});
it_exclude_dbs(['postgres'])("link multiple providers and updates token", (done) => {
var provider = getMockFacebookProvider();
var secondProvider = getMockFacebookProviderWithIdToken('8675309', 'jenny_valid_token');
var errorHandler = function(model, error) {
console.error(error);
fail('Should not fail');
done();
}
var mockProvider = getMockMyOauthProvider();
Parse.User._registerAuthenticationProvider(provider);
Parse.User._logInWith("facebook", {
success: function(model) {
Parse.User._registerAuthenticationProvider(mockProvider);
let objectId = model.id;
model._linkWith("myoauth", {
success: function(model) {
Parse.User._registerAuthenticationProvider(secondProvider);
Parse.User.logOut().then(() => {
return Parse.User._logInWith("facebook", {
success: () => {
Parse.User.logOut().then(() => {
return Parse.User._logInWith("myoauth", {
success: (user) => {
expect(user.id).toBe(objectId);
done();
}
})
})
},
error: errorHandler
});
})
},
error: errorHandler
})
},
error: errorHandler
});
});
it_exclude_dbs(['postgres'])("link multiple providers and update token", (done) => {
var provider = getMockFacebookProvider();
var mockProvider = getMockMyOauthProvider();