protected virtual async Task MapBillingAddressPostalCodeToPaymentAsync(UpdateBillingAddressPostalCodeParam param, Payment payment) { var country = await CountryService.RetrieveCountryAsync(new RetrieveCountryParam { CultureInfo = param.CultureInfo, IsoCode = param.CountryCode }).ConfigureAwait(false); country.Validate(param.PostalCode); payment.BillingAddress.PropertyBag[AddressBookIdPropertyBagKey] = Guid.Empty; // because the updated address will not correspond to any registered address payment.BillingAddress.PostalCode = param.PostalCode; payment.BillingAddress.CountryCode = country.IsoCode; payment.BillingAddress.RegionCode = GetRegionCodeBasedOnPostalCode(param.PostalCode, param.CountryCode); }
public void WHEN_postal_code_does_not_matches_regex_SHOULD_result_not_be_null() { // Arrange _container.Use(CountryServiceMock.Create(CanadianPostalCodeRegex)); var service = _container.CreateInstance <CartService>(); var param = new UpdateBillingAddressPostalCodeParam { CultureInfo = TestingExtensions.GetRandomCulture(), CustomerId = Guid.NewGuid(), CartName = GetRandom.String(32), BaseUrl = GetRandom.String(32), Scope = GetRandom.String(32), PostalCode = "any", CountryCode = GetRandom.String(1) }; // Act and Assert Assert.ThrowsAsync <InvalidOperationException>(() => service.UpdateBillingAddressPostalCodeAsync(param)); }
public virtual async Task <CartViewModel> UpdateBillingAddressPostalCodeAsync(UpdateBillingAddressPostalCodeParam param) { if (param == null) { throw new ArgumentNullException(nameof(param)); } ProcessedCart cart = await CartRepository.GetCartAsync(new GetCartParam { BaseUrl = param.BaseUrl, Scope = param.Scope, CultureInfo = param.CultureInfo, CustomerId = param.CustomerId, CartName = param.CartName }).ConfigureAwait(false); var payment = cart.Payments?.Find(x => !x.IsVoided()) ?? throw new InvalidOperationException("There is no valid payment from which we can get or set the billing address"); if (payment.BillingAddress == null) { payment.BillingAddress = new Address() { PropertyBag = new PropertyBag() }; } await MapBillingAddressPostalCodeToPaymentAsync(param, payment); return(await UpdateCartAsync(new UpdateCartViewModelParam { BaseUrl = param.BaseUrl, BillingCurrency = cart.BillingCurrency, CartName = cart.Name, CartType = cart.CartType, Coupons = cart.Coupons, CultureInfo = param.CultureInfo, Customer = cart.Customer, CustomerId = cart.CustomerId, OrderLocation = cart.OrderLocation, Payments = cart.Payments, PropertyBag = cart.PropertyBag, Scope = cart.ScopeId, Shipments = cart.Shipments, Status = cart.Status }).ConfigureAwait(false)); }