public async Task TestSubscribeListMemberAsPending() { string email = GetTestEmail(); try { await newsletterService.SetSubscription(email, true, true); Status status = await newsletterService.GetListMemberStatus(email); Assert.Equal(Status.Pending, status); Assert.True(await newsletterService.IsSubscribedAsync(email)); } finally { await newsletterService.UnsubscribeMember(email); } }
public async Task <UserResult> UpdateUser(UpdatedUser updatedUser, ClaimsPrincipal claimsUser) { IEnumerable <IdentityError> validationResults = ValidationHelper.ValidateAsIdentity(updatedUser, serviceProvider); if (validationResults.Any()) { return(new UserResult(IdentityResult.Failed(validationResults.ToArray()))); } ApplicationUser?user = await userManager.FindByIdAsync(updatedUser.Id).ConfigureAwait(false); if (user == null) { return(new UserResult(IdentityResult.Failed(new IdentityError() { Code = "NOUSER", Description = "This user doesn't exist" }))); } var loggedInUser = await userManager.GetUserAsync(claimsUser).ConfigureAwait(false); // need to be logged in as either admin, or the user being updated, only admins can update representsNumberParticipants or change a user to admin if (!(claimsUser.IsInRole(AuthorizationConstants.AdminRole) || loggedInUser.Id == user.Id) || (!claimsUser.IsInRole(AuthorizationConstants.AdminRole) && (updatedUser.representsNumberParticipants != user.RepresentsNumberParticipants || updatedUser.IsAdmin))) { return(new UserResult(IdentityResult.Failed(new IdentityError() { Code = "NOPERM", Description = "You don't have permission to update this user" }))); } logger.LogInformation("Updating user"); user.Email = updatedUser.Email; user.FirstName = updatedUser.FirstName; user.LastName = updatedUser.LastName; user.RepresentsNumberParticipants = updatedUser.representsNumberParticipants; var result = await userManager.UpdateAsync(user).ConfigureAwait(false); if (updatedUser.IsAdmin) { await userManager.AddToRoleAsync(user, AuthorizationConstants.AdminRole).ConfigureAwait(false); } else { await userManager.RemoveFromRoleAsync(user, AuthorizationConstants.AdminRole).ConfigureAwait(false); } if (!result.Succeeded) { LogErrors("Error updating user", result); return(new UserResult(result)); } else { try { await newsletterService.SetSubscription(user.Email, updatedUser.IsSubscribedNewsletter).ConfigureAwait(false); } catch (Exception e) { var newsletterResult = IdentityResult.Failed(new IdentityError() { Code = "NEWSSUBCR", Description = $"Newsletter subscription failed: {e.Message}" }); LogErrors("Error updating user", newsletterResult); return(new UserResult(newsletterResult)); } logger.LogInformation("Updated user"); return(new UserResult(user, IdentityResult.Success)); } }