public async Task WHEN_passing_valid_arguments_SHOULD_create_viewmodel() { //Arrange var address = MockAddressFactory.CreateRandom(); var customer = MockCustomerFactory.CreateRandom(); customer.AddressIds = new List <Guid> { address.Id }; var mockedCustomerRepository = new Mock <ICustomerRepository>(); mockedCustomerRepository.Setup(r => r.GetCustomerByIdAsync(It.IsAny <GetCustomerByIdParam>())).ReturnsAsync(customer); _container.Use(mockedCustomerRepository); var mockedCustomerAddressRepository = new Mock <ICustomerAddressRepository>(); mockedCustomerAddressRepository.Setup(r => r.UpdateAddressAsync(It.IsAny <Guid>(), It.IsAny <Address>())).ReturnsAsync(address); _container.Use(mockedCustomerAddressRepository); var mockedAddressRepository = new Mock <IAddressRepository>(); mockedAddressRepository.Setup(r => r.GetAddressByIdAsync(It.IsAny <Guid>())).ReturnsAsync(address); _container.Use(mockedAddressRepository); var customerViewService = _container.CreateInstance <CustomerAddressViewService>(); //Act var param = new EditAddressParam { Scope = GetRandom.String(32), CustomerId = Guid.NewGuid(), CultureInfo = TestingExtensions.GetRandomCulture(), AddressId = address.Id, ReturnUrl = GetRandom.String(32), EditAddress = new EditAddressRequest() }; var viewModel = await customerViewService.UpdateAddressAsync(param); //Assert viewModel.Should().NotBeNull(); viewModel.Status.ShouldBeEquivalentTo(MyAccountStatus.Success.ToString()); }
public async Task WHEN_address_does_not_belong_to_the_customer_SHOULD_return_null() { //Arrange var address = MockAddressFactory.CreateRandom(); var customer = MockCustomerFactory.CreateRandom(); customer.AddressIds = new List <Guid> { //no address }; var mockedCustomerRepository = new Mock <ICustomerRepository>(); mockedCustomerRepository.Setup(r => r.GetCustomerByIdAsync(It.IsAny <GetCustomerByIdParam>())).ReturnsAsync(customer); _container.Use(mockedCustomerRepository); var mockedCustomerAddressRepository = new Mock <ICustomerAddressRepository>(); mockedCustomerAddressRepository.Setup(r => r.UpdateAddressAsync(It.IsAny <Guid>(), It.IsAny <Address>())).ReturnsAsync(address); _container.Use(mockedCustomerAddressRepository); var mockedAddressRepository = new Mock <IAddressRepository>(); mockedAddressRepository.Setup(r => r.GetAddressByIdAsync(It.IsAny <Guid>())).ReturnsAsync(address); _container.Use(mockedAddressRepository); var customerViewService = _container.CreateInstance <CustomerAddressViewService>(); //Act var param = new EditAddressParam { Scope = GetRandom.String(32), CustomerId = Guid.NewGuid(), CultureInfo = TestingExtensions.GetRandomCulture(), AddressId = address.Id, ReturnUrl = GetRandom.String(32), EditAddress = new EditAddressRequest() }; var viewModel = await customerViewService.UpdateAddressAsync(param); //Assert viewModel.Should().BeNull(); }
public void WHEN_EditAddress_is_Null_SHOULD_throw_ArgumentException() { //Arrange var customerAddressViewService = _container.CreateInstance <CustomerAddressViewService>(); var param = new EditAddressParam { Scope = GetRandom.String(32), CustomerId = Guid.NewGuid(), CultureInfo = TestingExtensions.GetRandomCulture(), AddressId = Guid.NewGuid(), ReturnUrl = GetRandom.String(32), }; //Act var ex = Assert.ThrowsAsync <ArgumentException>(() => customerAddressViewService.UpdateAddressAsync(param)); //Assert ex.Message.Should().ContainEquivalentOf("EditAddress"); }
public void WHEN_CultureInfo_is_Empty_SHOULD_throw_ArgumentException(CultureInfo cultureInfo) { //Arrange var customerAddressViewService = _container.CreateInstance <CustomerAddressViewService>(); var param = new EditAddressParam { Scope = GetRandom.String(32), CustomerId = Guid.NewGuid(), CultureInfo = cultureInfo, AddressId = Guid.NewGuid(), ReturnUrl = GetRandom.String(32), EditAddress = new EditAddressRequest() }; //Act var ex = Assert.ThrowsAsync <ArgumentException>(() => customerAddressViewService.UpdateAddressAsync(param)); //Assert ex.Message.Should().ContainEquivalentOf("CultureInfo"); }
/// <summary> /// Update an Address for the given customer /// </summary> /// <param name="editAddressParam">Service call params <see cref="EditAddressParam"/></param> /// <returns> /// The created Address and a status representing a possible cause of errors. /// </returns> public virtual async Task <EditAddressViewModel> UpdateAddressAsync(EditAddressParam editAddressParam) { if (editAddressParam == null) { throw new ArgumentNullException(nameof(editAddressParam)); } if (editAddressParam.EditAddress == null) { throw new ArgumentException(GetMessageOfNull(nameof(editAddressParam.EditAddress)), nameof(editAddressParam)); } if (editAddressParam.AddressId == Guid.Empty) { throw new ArgumentException(GetMessageOfEmpty(nameof(editAddressParam.AddressId)), nameof(editAddressParam)); } if (editAddressParam.CustomerId == Guid.Empty) { throw new ArgumentException(GetMessageOfEmpty(nameof(editAddressParam.CustomerId)), nameof(editAddressParam)); } if (editAddressParam.CultureInfo == null) { throw new ArgumentException(GetMessageOfNull(nameof(editAddressParam.CultureInfo)), nameof(editAddressParam)); } if (string.IsNullOrWhiteSpace(editAddressParam.Scope)) { throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(editAddressParam.Scope)), nameof(editAddressParam)); } var baseAddress = await AddressRepository.GetAddressByIdAsync(editAddressParam.AddressId).ConfigureAwait(false); if (baseAddress == null) { return(null); } if (!await EnsureAddressBelongsToCustomer(editAddressParam.CustomerId, editAddressParam.Scope, baseAddress.Id).ConfigureAwait(false)) { return(null); } var updatedAddress = await CustomerAddressRepository .UpdateAddressAsync(editAddressParam.CustomerId, ConvertToAddress(baseAddress, editAddressParam.EditAddress)) .ConfigureAwait(false); if (editAddressParam.EditAddress.IsPreferredShipping || editAddressParam.EditAddress.IsPreferredBilling) { await SetDefaultAddressAsync(new SetDefaultAddressParam { AddressId = editAddressParam.AddressId, CustomerId = editAddressParam.CustomerId, Scope = editAddressParam.Scope }).ConfigureAwait(false); } //Update recurring carts with this address Id await RecurringOrderCartsViewService.UpdateRecurringOrderCartsAddressesAsync(new Cart.Parameters.UpdateRecurringOrderCartsAddressesParam { BaseUrl = "Empty", //Dont need but can't allow empty CultureInfo = editAddressParam.CultureInfo, CustomerId = editAddressParam.CustomerId, ScopeId = editAddressParam.Scope, AddressId = updatedAddress.Id, }).ConfigureAwait(false); return(await GetEditAddressViewModel(new GetEditAddressViewModelParam { Address = updatedAddress, Status = MyAccountStatus.Success, ReturnUrl = editAddressParam.ReturnUrl, IsUpdating = false, CultureInfo = editAddressParam.CultureInfo }).ConfigureAwait(false)); }