public virtual async Task <IHttpActionResult> UpdateAddressAsync(Guid id, EditAddressRequest request)
        {
            var returnUrl = request.ReturnUrl;

            if (string.IsNullOrWhiteSpace(returnUrl) || !UrlFormatter.IsReturnUrlValid(RequestUtils.GetBaseUrl(Request).ToString(), returnUrl))
            {
                returnUrl = MyAccountUrlProvider.GetAddressListUrl(new BaseUrlParameter {
                    CultureInfo = ComposerContext.CultureInfo
                });
            }

            var viewModel = await CustomerAddressViewService.UpdateAddressAsync(new EditAddressParam
            {
                CustomerId  = ComposerContext.CustomerId,
                CultureInfo = ComposerContext.CultureInfo,
                Scope       = ComposerContext.Scope,
                EditAddress = request,
                AddressId   = id,
                ReturnUrl   = returnUrl
            });

            if (viewModel == null)
            {
                return(Unauthorized());
            }

            return(Ok(viewModel));
        }
        public void WhenCallingEditAddressFor_AnValidPerson_AndAnInvalidAddressId_ItShouldFail()
        {
            var editRequest = new EditAddressRequest(GetRequestTestsHelper.ValidPersonId, GetRequestTestsHelper.InvalidAddressId);
            editRequest.Find();

            editRequest.Succeeded().Should().BeFalse();
            var result = editRequest.Result();
            result.Should().BeNull();
        }
        public void WhenCallingEditAddressFor_AValidPerson_AndAValidAddressId_ItShouldReturnThatAddress()
        {
            var addressId = GetRequestTestsHelper.ValidAddressId;
            var editRequest = new EditAddressRequest(GetRequestTestsHelper.ValidPersonId, addressId);
            editRequest.Find();

            editRequest.Succeeded().Should().BeTrue();
            var result = editRequest.Result();
            result.Should().NotBeNull();
            result.Id.Should().Be(addressId);
        }
        /// <summary>
        /// Convert a request to <see cref="Address"/>, including mandatory, optional and additionnal properties
        /// </summary>
        /// <param name="baseAddress">
        /// The fully populated address to update, be warned that incomplete update form will wipe data,
        /// it is best practice to load from repository before saving. The base adresse is the one loaded from the repository
        /// </param>
        /// <param name="request"></param>
        /// <returns></returns>
        protected virtual Address ConvertToAddress(Address baseAddress, EditAddressRequest request)
        {
            baseAddress.AddressName         = request.AddressName;
            baseAddress.City                = request.City;
            baseAddress.CountryCode         = request.CountryCode;
            baseAddress.FirstName           = request.FirstName;
            baseAddress.LastName            = request.LastName;
            baseAddress.Line1               = request.Line1;
            baseAddress.Line2               = request.Line2;
            baseAddress.PhoneNumber         = request.PhoneNumber;
            baseAddress.PostalCode          = request.PostalCode;
            baseAddress.RegionCode          = request.RegionCode;
            baseAddress.IsPreferredShipping = request.IsPreferredShipping;
            baseAddress.IsPreferredBilling  = request.IsPreferredBilling;

            baseAddress.PropertyBag = baseAddress.PropertyBag ?? new PropertyBag();

            foreach (var additionnalProperty in request.AdditionnalProperties)
            {
                baseAddress.PropertyBag[additionnalProperty.Key] = additionnalProperty.Value;
            }

            return(baseAddress);
        }