public async Task SavesNewDetails() { // Arrange var saveChangesCalled = false; var testUserToUpdate = await testUserRepo.FindByEmailAsync("*****@*****.**"); var testUserDetails = new UpdateDetailsModel { FirstName = "NewFirstName", LastName = "NewLastName", JobTitle = "NewJobTitle", ContactPhoneNumber = "NewContactPhoneNumber", AllowContact = !testUserToUpdate.AllowContact, SendUpdates = !testUserToUpdate.SendUpdates }; mockDataRepo.Setup(x => x.SaveChangesAsync()) .Callback(() => saveChangesCalled = true) .Returns(Task.CompletedTask); // Act await testUserRepo.UpdateDetailsAsync(testUserToUpdate, testUserDetails); // Assert Assert.IsTrue(saveChangesCalled, "Expected SaveChangesAsync to be called"); testUserDetails.Compare(testUserToUpdate); }
public void ThrowsErrorWhenArgumentIsNull(User testUserToUpdateArg, UpdateDetailsModel testChangeDetailsArg, string expectedErrorMessage) { // Act var actualException = Assert.ThrowsAsync <ArgumentNullException>( async() => await testUserRepo.UpdateDetailsAsync(testUserToUpdateArg, testChangeDetailsArg)); // Assert Assert.AreEqual(expectedErrorMessage, actualException.Message, "Expected exception message to match"); }
public async Task <bool> UpdateDetailsAsync(User userToUpdate, UpdateDetailsModel changeDetails) { if (userToUpdate is null) { throw new ArgumentNullException(nameof(userToUpdate)); } if (changeDetails is null) { throw new ArgumentNullException(nameof(changeDetails)); } if (userToUpdate.Status != UserStatuses.Active) { throw new ArgumentException($"Can only update details for active users. UserId={userToUpdate.UserId}"); } // check we have changes var originalDetails = AutoMapper.Map <UpdateDetailsModel>(userToUpdate); if (originalDetails.Equals(changeDetails)) { return(false); } // update current user with new details userToUpdate.Firstname = changeDetails.FirstName; userToUpdate.Lastname = changeDetails.LastName; userToUpdate.JobTitle = changeDetails.JobTitle; userToUpdate.ContactFirstName = changeDetails.FirstName; userToUpdate.ContactLastName = changeDetails.LastName; userToUpdate.ContactJobTitle = changeDetails.JobTitle; userToUpdate.ContactPhoneNumber = changeDetails.ContactPhoneNumber; userToUpdate.SendUpdates = changeDetails.SendUpdates; userToUpdate.AllowContact = changeDetails.AllowContact; userToUpdate.Modified = VirtualDateTime.Now; // save await DataRepository.SaveChangesAsync(); // log details changed await UserAuditLog.LogDetailsChangedAsync(originalDetails, changeDetails, userToUpdate, userToUpdate.EmailAddress); // success return(true); }
public async Task LogDetailsChangedAsync(UpdateDetailsModel originalDetails, UpdateDetailsModel changeDetails, User userToUpdate, string actionByEmailAddress) { if (userToUpdate.EmailAddress.StartsWithI(SharedOptions.TestPrefix)) { return; } await WriteAsync( new UserLogModel( userToUpdate.UserId.ToString(), userToUpdate.EmailAddress, UserAction.ChangedDetails, nameof(UserAction.ChangedDetails), JsonConvert.SerializeObject(originalDetails), JsonConvert.SerializeObject(changeDetails), actionByEmailAddress)); }