/// <summary> /// Updates the name, email, password and phone number of the customer with the specified id. /// </summary> /// <param name="request">The request containing the information that should be updated for the customer.</param> /// <param name="customerId">The id of the customer the changes should be applied to.</param> /// <returns></returns> public async Task <EditCustomerResponse> EditCustomerAsync(EditCustomerRequest request, string customerId) { var customer = await _unitOfWork.CustomerRepository.FindByIDAsync(customerId); await _unitOfWork.IdentityUserRepository.TransactionWrapper(async() => { customer.Name = request.Name; customer.PhoneNumber = request.PhoneNumber; if (request.ChangePassword == true) { var password = request.Password; var oldPassword = request.OldPassword; await _unitOfWork.IdentityUserRepository.ChangePasswordAsync(customer, password, oldPassword); } if (customer.Email != request.Email) { await _unitOfWork.IdentityUserRepository.ChangeEmailAsync(customer, request.Email); } _unitOfWork.CustomerRepository.Update(customer); await _unitOfWork.SaveChangesAsync(); }); var customerDto = _mapper.Map <CustomerDto>(customer); var response = new EditCustomerResponse { Customer = customerDto }; return(response); }
public async Task EditCustomerAsync_EditingCustomerSucceeds__ReturnsAEditCustomerResponse() { //Arrange var request = new EditCustomerRequest { Email = "*****@*****.**", Name = "Axel", Password = "******", RepeatedPassword = "******", PhoneNumber = "66666666", OldPassword = "******", ChangePassword = true }; var customer = new Customer { Id = "SomeId", Email = "*****@*****.**", PhoneNumber = "11111111", Name = "Hans" }; _unitOfWork.IdentityUserRepository.AddIdentityUserAsync(customer, request.OldPassword) .ReturnsForAnyArgs(IdentityResult.Success); _unitOfWork.IdentityUserRepository.SignInAsync(customer.Email, request.OldPassword) .ReturnsForAnyArgs(SignInResult.Success); var customerDto = new CustomerDto { Email = request.Email, Name = request.Name, PhoneNumber = request.PhoneNumber }; var editCustomerResponse = new EditCustomerResponse { Customer = customerDto }; _unitOfWork.CustomerRepository.FindByIDAsync(null).ReturnsForAnyArgs(customer); _mapper.Map <CustomerDto>(null).ReturnsForAnyArgs(customerDto); //Act var response = await _customerService.EditCustomerAsync(request, customer.Id); //Assert Assert.That(response.Customer, Is.EqualTo(editCustomerResponse.Customer)); }