public void ShouldCallServiceWithCorrectArgs()
        {
            var cartId = Guid.NewGuid();

            var request = new AddPartiesRequest(
                new Cart {
                ExternalId = cartId.ToString(), BuyerCustomerParty = new CartParty()
                {
                    ExternalId = "1"
                }
            },                                                                                                // only one party to add
                new List <Party> {
                new Party(), new Party()
            }
                );

            var result = new AddPartiesResult();
            var args   = new ServicePipelineArgs(request, result);

            _client.AddAddresses(Arg.Any <CustomerAddressModel[]>(), Arg.Any <Guid>()).Returns(new Response()
            {
                Success = true,
                Message = "Success"
            });

            _processor.Process(args);

            // asserts
            // result.Success.Should().Be(true);
            // _client.Received().AddAddressesByExternalCustomerId(Arg.Is<CustomerAddressModel[]>(x => x.Length > 0), Arg.Is(cartId));
            _client.Received().AddAddresses(Arg.Any <CustomerAddressModel[]>(), Arg.Any <Guid>());
        }
        public void ShouldAddPartiesToCartById()
        {
            var cartId = Guid.NewGuid();

            var request = new AddPartiesRequest(
                new Cart
            {
                ExternalId = cartId.ToString(),
                Name       = "Vasya"
            },
                new List <Party>
            {
                new Party
                {
                    Address1  = "my address 1",
                    Address2  = "my address 2",
                    FirstName = "Koly",
                    LastName  = "Ivanov"
                },
                new Party()
            });
            var result = new AddPartiesResult();
            var args   = new ServicePipelineArgs(request, result);

            _client.AddAddresses(Arg.Any <CustomerAddressModel[]>(), Arg.Any <Guid>())
            .Returns(new Response()
            {
                Success = true,
                Message = "Success"
            });

            _processor.Process(args);

            result.Success.Should().BeTrue();
        }
        private Party ProcessCommerceParty(AddPartiesResult result, Profile customerProfile, CommerceParty partyToAdd)
        {
            Assert.ArgumentNotNull(partyToAdd, nameof(partyToAdd));
            Assert.ArgumentNotNull(partyToAdd.Name, nameof(partyToAdd.Name));
            Assert.ArgumentNotNull(partyToAdd.ExternalId, nameof(partyToAdd.ExternalId));

            Profile addressProfile = null;
            var     response       = CreateAddressProfile(partyToAdd.ExternalId, ref addressProfile);

            if (!response.Success)
            {
                result.Success = false;
                response.SystemMessages.ToList().ForEach(m => result.SystemMessages.Add(m));
                return(null);
            }

            var requestToCommerceProfile = new TranslateEntityToCommerceAddressProfileRequest(partyToAdd, addressProfile);

            PipelineUtility.RunCommerceConnectPipeline <TranslateEntityToCommerceAddressProfileRequest, CommerceResult>(Constants.Pipelines.TranslateEntityToCommerceAddressProfile, requestToCommerceProfile);

            addressProfile.Update();

            ProfilePropertyListCollection <string> addressList;
            var profileValue = customerProfile[Commerce.Constants.Profile.GeneralInfo.AddressList].Value as object[];

            if (profileValue != null)
            {
                var e = profileValue.Select(i => i.ToString());
                addressList = new ProfilePropertyListCollection <string>(e);
            }
            else
            {
                addressList = new ProfilePropertyListCollection <string>();
            }

            addressList.Add(partyToAdd.ExternalId);
            customerProfile[Commerce.Constants.Profile.GeneralInfo.AddressList].Value = addressList.Cast <object>().ToArray();

            if (partyToAdd.IsPrimary)
            {
                customerProfile[Commerce.Constants.Profile.GeneralInfo.PreferredAddress].Value = partyToAdd.ExternalId;
            }

            customerProfile.Update();

            var newParty        = EntityFactory.Create <CommerceParty>("Party");
            var requestToEntity = new TranslateCommerceAddressProfileToEntityRequest(addressProfile, newParty);

            PipelineUtility.RunCommerceConnectPipeline <TranslateCommerceAddressProfileToEntityRequest, CommerceResult>(Constants.Pipelines.TranslateCommerceAddressProfileToEntity, requestToEntity);

            return(requestToEntity.DestinationParty);
        }
示例#4
0
        public void ShouldHandleInvalidCustomerId()
        {
            var request = new AddPartiesRequest(
                new CommerceCustomer {
                ExternalId = "1234"
            },
                new List <Party>(0)
                );
            var result = new AddPartiesResult();
            var args   = new ServicePipelineArgs(request, result);

            _processor.Process(args);

            result.Success.Should().Be(false);
            result.SystemMessages.Should().HaveCount(x => x > 0);
        }
示例#5
0
        /// <summary>
        /// Processes the specified arguments.
        /// </summary>
        /// <param name="args">The arguments.</param>
        public override void Process(Sitecore.Commerce.Pipelines.ServicePipelineArgs args)
        {
            Assert.ArgumentNotNull(args, "args");
            Assert.ArgumentNotNull(args.Request, "args.request");

            AddPartiesRequest request = (AddPartiesRequest)args.Request;
            AddPartiesResult  result  = (AddPartiesResult)args.Result;

            var cartContext = CartPipelineContext.Get(request.RequestContext);

            Assert.IsNotNull(cartContext, "cartContext");

            List <Party> partiesAdded = new List <Party>();

            if (cartContext.Basket != null)
            {
                foreach (Party party in request.Parties)
                {
                    Party newParty;

                    if (party == null)
                    {
                        continue;
                    }

                    newParty = this.ProcessParty(party, cartContext);

                    partiesAdded.Add(newParty);
                }
            }

            result.Parties = partiesAdded;

            // Needed by the RunSaveCart CommerceConnect pipeline.
            var translateCartRequest = new TranslateOrderGroupToEntityRequest(cartContext.UserId, cartContext.ShopName, cartContext.Basket);
            var translateCartResult  = PipelineUtility.RunCommerceConnectPipeline <TranslateOrderGroupToEntityRequest, TranslateOrderGroupToEntityResult>(PipelineNames.TranslateOrderGroupToEntity, translateCartRequest);

            result.Cart = translateCartResult.Cart;
        }
示例#6
0
        public void ShouldCallServiceWithCorrectArgs()
        {
            var customerId = Guid.NewGuid();

            var request = new AddPartiesRequest(
                new CommerceCustomer {
                ExternalId = customerId.ToString()
            },
                new List <Party> {
                new Party(), new Party()
            }
                );
            var result = new AddPartiesResult();
            var args   = new ServicePipelineArgs(request, result);

            _client.AddAddresses(Arg.Any <Guid>(), Arg.Any <AddressModel[]>()).Returns(new ArrayOfAddressModelResponse()
            {
            });
            _processor.Process(args);

            _client.Received().AddAddresses(Arg.Is(customerId), Arg.Is <AddressModel[]>(x => x.Length == request.Parties.Count));
        }
        /// <summary>
        /// Sets the shipping addresses.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="visitorContext">The visitor context.</param>
        /// <param name="cart">The cart.</param>
        /// <param name="shippingAddresses">The shipping addresses.</param>
        /// <param name="emailPartyList">The email party list.</param>
        /// <returns>
        /// The manager response with a cart in the result.
        /// </returns>
        protected virtual AddPartiesResult SetShippingAddresses(CommerceStorefront storefront, VisitorContext visitorContext, CommerceCart cart, List<PartyInputModelItem> shippingAddresses, List<RefSFModels.EmailParty> emailPartyList)
        {
            var errorResult = new AddPartiesResult { Success = false };

            var removePartiesResponse = this.RemoveAllShippingParties(storefront, visitorContext, cart);
            if (!removePartiesResponse.ServiceProviderResult.Success)
            {
                errorResult.SystemMessages.Add(removePartiesResponse.ServiceProviderResult.SystemMessages[0]);
                return errorResult;
            }

            List<Party> partyList = new List<Party>();

            if (shippingAddresses != null && shippingAddresses.Any())
            {
                partyList.AddRange(shippingAddresses.ToNewShippingParties());
            }

            if (emailPartyList != null && emailPartyList.Any())
            {
                partyList.AddRange(emailPartyList.Cast<Party>().ToList());
            }

            AddPartiesRequest addPartiesRequest = new AddPartiesRequest(cart, partyList);
            var addPartiesResponse = this.CartServiceProvider.AddParties(addPartiesRequest);

            return addPartiesResponse;
        }
示例#8
0
 /// <summary>
 /// Processes the custom party.
 /// </summary>
 /// <param name="result">The result.</param>
 /// <param name="customerProfile">The customer profile.</param>
 /// <param name="party">The party.</param>
 /// <returns>Newly created party.</returns>
 private Party ProcessCustomParty(AddPartiesResult result, Profile customerProfile, Party party)
 {
     return(null);
 }
示例#9
0
        public void ShouldAddPartiesToCustomerById()
        {
            var customerId = Guid.NewGuid();

            var request = new AddPartiesRequest(
                new CommerceCustomer
            {
                ExternalId = customerId.ToString(),
                Name       = "Vasya"
            },
                new List <Party>
            {
                new Party
                {
                    Address1  = "my address 1",
                    Address2  = "my address 2",
                    FirstName = "Koly",
                    LastName  = "Ivanov"
                },
                new Party()
            });
            var result = new AddPartiesResult();
            var args   = new ServicePipelineArgs(request, result);

            _client.AddAddresses(Arg.Any <Guid>(), Arg.Any <AddressModel[]>())
            .Returns(new ArrayOfAddressModelResponse()
            {
                Success = true,
                Message = "Success",
                Result  = new[]
                {
                    new AddressModel()
                    {
                        Address1  = "my address 1",
                        Address2  = "my address 2",
                        FirstName = "Koly",
                        LastName  = "Ivanov",
                        City      = "Vinnitsa",
                        Company   = "Sitecore",
                        CountryThreeLetterIsoCode = "USA",
                        CountryTwoLetterIsoCode   = "US",
                        Email         = "*****@*****.**",
                        FaxNumber     = "9999",
                        Id            = "1",
                        PhoneNumber   = "043298765",
                        ZipPostalCode = "21000"
                    },
                    new AddressModel()
                    {
                        Address1  = "test address 1",
                        Address2  = "test address 2",
                        FirstName = "Ivan",
                        LastName  = "Petrovich"
                    }
                }
            });

            _processor.Process(args);

            result.Success.Should().BeTrue();
            result.Parties.Should().HaveCount(2);
        }
示例#10
0
 /// <summary>
 /// Processes the custom party.
 /// </summary>
 /// <param name="result">The result.</param>
 /// <param name="customerProfile">The customer profile.</param>
 /// <param name="party">The party.</param>
 /// <returns>Newly created party.</returns>
 private Party ProcessCustomParty(AddPartiesResult result, Profile customerProfile, Party party)
 {
     return null;
 }
示例#11
0
        /// <summary>
        /// Processes the commerce party.
        /// </summary>
        /// <param name="result">The result.</param>
        /// <param name="customerProfile">The customer profile.</param>
        /// <param name="partyToAdd">The party to add.</param>
        /// <returns>Newly created party.</returns>
        protected virtual Party ProcessCommerceParty(AddPartiesResult result, Profile customerProfile, RefSFModels.CommerceParty partyToAdd)
        {
            Assert.ArgumentNotNull(partyToAdd.Name, "partyToAdd.Name");
            Assert.ArgumentNotNull(partyToAdd.ExternalId, "partyToAdd.ExternalId");

            Profile addressProfile = null;
            var response = this.CreateAddressProfile(partyToAdd.ExternalId, ref addressProfile);
            if (!response.Success)
            {
                result.Success = false;
                response.SystemMessages.ToList().ForEach(m => result.SystemMessages.Add(m));
                return null;
            }

            var requestToCommerceProfile = new TranslateEntityToCommerceAddressProfileRequest(partyToAdd, addressProfile);
            PipelineUtility.RunCommerceConnectPipeline<TranslateEntityToCommerceAddressProfileRequest, CommerceResult>(CommerceServerStorefrontConstants.PipelineNames.TranslateEntityToCommerceAddressProfile, requestToCommerceProfile);

            addressProfile.Update();

            ProfilePropertyListCollection<string> addressList;
            var profileValue = customerProfile["GeneralInfo.address_list"].Value as object[];
            if (profileValue != null)
            {
                var e = profileValue.Select(i => i.ToString());
                addressList = new ProfilePropertyListCollection<string>(e);
            }
            else
            {
                addressList = new ProfilePropertyListCollection<string>();
            }

            addressList.Add(partyToAdd.ExternalId);
            customerProfile["GeneralInfo.address_list"].Value = addressList.Cast<object>().ToArray();

            if (partyToAdd.IsPrimary)
            {
                customerProfile["GeneralInfo.preferred_address"].Value = partyToAdd.ExternalId;
            }

            customerProfile.Update();

            var newParty = this.EntityFactory.Create<RefSFModels.CommerceParty>("Party");
            TranslateCommerceAddressProfileToEntityRequest requestToEntity = new TranslateCommerceAddressProfileToEntityRequest(addressProfile, newParty);
            PipelineUtility.RunCommerceConnectPipeline<TranslateCommerceAddressProfileToEntityRequest, CommerceResult>(CommerceServerStorefrontConstants.PipelineNames.TranslateCommerceAddressProfileToEntity, requestToEntity);

            return requestToEntity.DestinationParty;
        }