Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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));
        }