public void User_LinkCredentials_MultipleTimes_AllowsLoginWithAllCredentials() { SyncTestHelpers.RunBaasTestAsync(async() => { var user = await DefaultApp.LogInAsync(Credentials.Anonymous()); var email = SyncTestHelpers.GetVerifiedUsername(); await DefaultApp.EmailPasswordAuth.RegisterUserAsync(email, SyncTestHelpers.DefaultPassword); var linkedUser1 = await user.LinkCredentialsAsync(Credentials.EmailPassword(email, SyncTestHelpers.DefaultPassword)); Assert.That(linkedUser1.Id, Is.EqualTo(user.Id)); var functionId = Guid.NewGuid().ToString(); var linkedUser2 = await user.LinkCredentialsAsync(Credentials.Function(new { realmCustomAuthFuncUserId = functionId })); Assert.That(linkedUser2.Id, Is.EqualTo(user.Id)); var emailPasswordUser = await DefaultApp.LogInAsync(Credentials.EmailPassword(email, SyncTestHelpers.DefaultPassword)); Assert.That(emailPasswordUser.Id, Is.EqualTo(user.Id)); var functionUser = await DefaultApp.LogInAsync(Credentials.Function(new { realmCustomAuthFuncUserId = functionId })); Assert.That(functionUser.Id, Is.EqualTo(user.Id)); Assert.That(user.Identities, Has.Length.EqualTo(3)); Assert.That(user.Identities[0].Provider, Is.EqualTo(Credentials.AuthProvider.Anonymous)); Assert.That(user.Identities[0].Id, Is.Not.Null); Assert.That(user.Identities[1].Provider, Is.EqualTo(Credentials.AuthProvider.EmailPassword)); Assert.That(user.Identities[1].Id, Is.Not.Null); Assert.That(user.Identities[2].Provider, Is.EqualTo(Credentials.AuthProvider.Function)); Assert.That(user.Identities[2].Id, Is.EqualTo(functionId)); }); }
public void User_LinkCredentials_AllowsLoginWithNewCredentials() { SyncTestHelpers.RunBaasTestAsync(async() => { var user = await DefaultApp.LogInAsync(Credentials.Anonymous()); Assert.That(user.Identities, Has.Length.EqualTo(1)); Assert.That(user.Identities[0].Provider, Is.EqualTo(Credentials.AuthProvider.Anonymous)); Assert.That(user.Identities[0].Id, Is.Not.Null); var email = SyncTestHelpers.GetVerifiedUsername(); await DefaultApp.EmailPasswordAuth.RegisterUserAsync(email, SyncTestHelpers.DefaultPassword); var linkedUser = await user.LinkCredentialsAsync(Credentials.EmailPassword(email, SyncTestHelpers.DefaultPassword)); Assert.That(user.Identities, Has.Length.EqualTo(2)); Assert.That(user.Identities[1].Provider, Is.EqualTo(Credentials.AuthProvider.EmailPassword)); Assert.That(user.Identities[1].Id, Is.Not.Null); Assert.That(linkedUser.Identities, Has.Length.EqualTo(2)); Assert.That(linkedUser.Id, Is.EqualTo(user.Id)); Assert.That(linkedUser.Identities, Is.EquivalentTo(user.Identities)); var emailPasswordUser = await DefaultApp.LogInAsync(Credentials.EmailPassword(email, SyncTestHelpers.DefaultPassword)); Assert.That(emailPasswordUser.Id, Is.EqualTo(user.Id)); Assert.That(emailPasswordUser.Identities, Is.EquivalentTo(user.Identities)); }); }
protected async Task <User> GetUserAsync(App app = null) { app ??= DefaultApp; var username = SyncTestHelpers.GetVerifiedUsername(); await app.EmailPasswordAuth.RegisterUserAsync(username, SyncTestHelpers.DefaultPassword); var credentials = Credentials.EmailPassword(username, SyncTestHelpers.DefaultPassword); return(await app.LogInAsync(credentials)); }
public void User_LinkCredentials_WhenInUse_Throws() { SyncTestHelpers.RunBaasTestAsync(async() => { var existingEmail = SyncTestHelpers.GetVerifiedUsername(); await DefaultApp.EmailPasswordAuth.RegisterUserAsync(existingEmail, SyncTestHelpers.DefaultPassword); var emailUser = await DefaultApp.LogInAsync(Credentials.EmailPassword(existingEmail, SyncTestHelpers.DefaultPassword)); var anonUser = await DefaultApp.LogInAsync(Credentials.Anonymous()); var ex = await TestHelpers.AssertThrows <AppException>(() => anonUser.LinkCredentialsAsync(Credentials.EmailPassword(existingEmail, SyncTestHelpers.DefaultPassword))); Assert.That(ex.StatusCode, Is.EqualTo(HttpStatusCode.Unauthorized)); Assert.That(ex.Message, Does.Contain("a user already exists with the specified provider")); }); }
public void User_LinkCredentials_WhenMultipleEmailPassword_Throws() { SyncTestHelpers.RunBaasTestAsync(async() => { var user = await GetUserAsync(); var email2 = SyncTestHelpers.GetVerifiedUsername(); await DefaultApp.EmailPasswordAuth.RegisterUserAsync(email2, SyncTestHelpers.DefaultPassword); var ex = await TestHelpers.AssertThrows <AppException>(() => user.LinkCredentialsAsync(Credentials.EmailPassword(email2, SyncTestHelpers.DefaultPassword))); // TODO: this should be bad request when https://jira.mongodb.org/browse/REALMC-7028 is fixed Assert.That(ex.StatusCode, Is.EqualTo(HttpStatusCode.InternalServerError)); Assert.That(ex.Message, Does.Contain("linking a local-userpass identity is not allowed when one is already linked")); }); }
public void EmailPasswordRegisterUser_Works() { SyncTestHelpers.RunBaasTestAsync(async() => { var username = SyncTestHelpers.GetVerifiedUsername(); await DefaultApp.EmailPasswordAuth.RegisterUserAsync(username, SyncTestHelpers.DefaultPassword); var user = await DefaultApp.LogInAsync(Credentials.EmailPassword(username, SyncTestHelpers.DefaultPassword)); Assert.That(user, Is.Not.Null); Assert.That(user.State, Is.EqualTo(UserState.LoggedIn)); Assert.That(user.Provider, Is.EqualTo(Credentials.AuthProvider.EmailPassword)); Assert.That(user.AccessToken, Is.Not.Empty); Assert.That(user.RefreshToken, Is.Not.Empty); Assert.That(DefaultApp.CurrentUser, Is.EqualTo(user)); }); }