示例#1
0
        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);
        }
示例#2
0
        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));
        }
示例#3
0
        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));
        }