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); }
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); }
/// <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; }
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; }
/// <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); }
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); }
/// <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; }
/// <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; }