Beispiel #1
0
        private static void OrderEntitlements(ShopperContext context)
        {
            Console.WriteLine("Begin OrderEntitlements View");

            var orderId = Scenarios.Simple2PhysicalDigitalItems.Run(context).Result;

            orderId.Should().NotBeNull();

            Orders.RunPendingOrdersMinion(context);
            Orders.RunSettleSalesActivitiesMinion(context);
            Orders.RunReleasedOrdersMinion(context);

            var result = Proxy.GetValue(ShopsContainer.GetEntityView(orderId, "OrderEntitlements", string.Empty, string.Empty));

            result.Should().NotBeNull();
            result.Policies.Should().NotBeEmpty();
            result.Properties.Should().NotBeEmpty();
            result.ChildViews.Should().NotBeEmpty();
            foreach (var childView in result.ChildViews.Cast <EntityView>())
            {
                childView.Should().NotBeNull();
                childView.Policies.Should().BeEmpty();
                childView.Properties.Should().NotBeEmpty();
                childView.Properties.All(p => !string.IsNullOrEmpty(p.Value)).Should().BeTrue();
                childView.ChildViews.Should().BeEmpty();
            }
        }
Beispiel #2
0
        public static string Run(ShopperContext context)
        {
            using (new SampleBuyScenarioScope())
            {
                try
                {
                    var container = context.ShopsContainer();

                    var cartId = Carts.GenerateCartId();

                    // Add Cart Line with Variant
                    var commandResult = Proxy.DoCommand(
                        container.AddCartLine(cartId, "Adventure Works Catalog|AW098 04|5", 1));
                    var cartLineId = commandResult.Models.OfType <LineAdded>().FirstOrDefault()?.LineId;

                    // Add Cart Line without Variant
                    Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW475 14|", 1));

                    // Add a valid coupon
                    Proxy.DoCommand(container.AddCouponToCart(cartId, "SingleUseCouponCode"));

                    Proxy.DoCommand(container.UpdateCartLine(cartId, cartLineId, 10));

                    commandResult = Proxy.DoCommand(
                        container.SetCartFulfillment(
                            cartId,
                            context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                    var totals = commandResult.Models.OfType <Totals>().First();

                    var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                    paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount);

                    Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));

                    var order = Orders.CreateAndValidateOrder(container, cartId, context);
                    order.Totals.GrandTotal.Amount.Should().Be(1219.90M);

                    cartId = Guid.NewGuid().ToString("B");
                    // Add Cart Line with Variant
                    Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW098 04|5", 1));
                    // Add Cart Line without Variant
                    Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW475 14|", 1));
                    // Add a valid coupon
                    commandResult = Proxy.DoCommand(container.AddCouponToCart(cartId, "SingleUseCouponCode"));
                    commandResult.ResponseCode.Should()
                    .NotBe(
                        "Ok",
                        "Expecting failure as this coupon code is single use only and has been used prior");
                    ConsoleExtensions.WriteExpectedError();

                    return(order.Id);
                }
                catch (Exception ex)
                {
                    ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                    return(null);
                }
            }
        }
Beispiel #3
0
        public static Task <string> Run(ShopperContext context)
        {
            var watch = new Stopwatch();

            watch.Start();

            try
            {
                var container = context.ShopsContainer();

                Console.WriteLine($"Begin {ScenarioName}");

                var cartId = Guid.NewGuid().ToString("B");

                Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW188 06|20", 1));
                Proxy.DoCommand(container.SetCartFulfillment(cartId, context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                var giftCardToUse = context.GiftCards.First();

                var commandResult = Proxy.DoCommand(
                    container.AddGiftCardPayment(
                        cartId,
                        new GiftCardPaymentComponent
                {
                    PaymentMethod = new EntityReference {
                        EntityTarget = "B5E5464E-C851-4C3C-8086-A4A874DD2DB0", Name = "GiftCard"
                    },
                    GiftCardCode = giftCardToUse,
                    Amount       = Money.CreateMoney(50),
                }));

                var totals = commandResult.Models.OfType <Totals>().First();

                var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount - totals.PaymentsTotal.Amount);
                commandResult           = Proxy.DoCommand(
                    container.AddFederatedPayment(
                        cartId,
                        paymentComponent));

                totals = commandResult.Models.OfType <Totals>().First();

                totals.PaymentsTotal.Amount.Should().Be(totals.GrandTotal.Amount);

                var order = Orders.CreateAndValidateOrder(container, cartId, context);

                watch.Stop();

                order.Totals.GrandTotal.Amount.Should().Be(119.50M);

                Console.WriteLine($"End {ScenarioName} (${order.Totals.GrandTotal.Amount}):{watch.ElapsedMilliseconds} ms");

                return(Task.FromResult(order.Id));
            }
            catch (Exception ex)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                return(null);
            }
        }
        public static string AddCustomer(string userName = "", ShopperContext context = null)
        {
            using (new SampleMethodScope())
            {
                var container = context != null?context.ShopsContainer() : ShopsContainer;

                var view = Proxy.GetValue(
                    ShopsContainer.GetEntityView(string.Empty, "Details", "AddCustomer", string.Empty));
                view.Should().NotBeNull();
                view.Properties.Should().NotBeEmpty();

                view.Action.Should().Be("AddCustomer");
                view.Properties.Should().NotBeEmpty();
                var customerName = string.IsNullOrEmpty(userName) ? _customerUserName : userName;
                view.Properties.FirstOrDefault(p => p.Name.Equals("Domain")).Value    = customerName.Split('\\')[0];
                view.Properties.FirstOrDefault(p => p.Name.Equals("LoginName")).Value = customerName.Split('\\')[1];
                view.Properties.FirstOrDefault(p => p.Name.Equals("Email")).Value     = GenerateRandomEmail();

                var action = Proxy.DoCommand(container.DoAction(view));
                action.Messages.Any(m => m.Code.Equals("validationerror", StringComparison.OrdinalIgnoreCase)).Should().BeTrue();
                ConsoleExtensions.WriteExpectedError();

                view.Properties.FirstOrDefault(p => p.Name.Equals("AccountStatus")).Value = "ActiveAccount";

                action = Proxy.DoCommand(container.DoAction(view));
                action.Messages.Should().NotContainErrors();
                action.Models.OfType <Sitecore.Commerce.Core.PersistedEntityModel>().FirstOrDefault().Should().NotBeNull();
                _customerId = action.Models.OfType <Sitecore.Commerce.Core.PersistedEntityModel>().FirstOrDefault()?.EntityId;

                return(_customerId);
            }
        }
 public static void RunPendingOrdersMinion(ShopperContext context)
 {
     EngineExtensions.RunMinionWithRetry(
         "Sitecore.Commerce.Plugin.Orders.PendingOrdersMinionBoss, Sitecore.Commerce.Plugin.Orders",
         ResolveMinionEnvironment(context),
         true);
 }
Beispiel #6
0
        private static void OrderEntitlements(ShopperContext context)
        {
            using (new SampleMethodScope())
            {
                var orderId = Simple2PhysicalDigitalItems.Run(context);
                orderId.Should().NotBeNull();

                Orders.RunPendingOrdersMinion(context);
                Orders.RunReleasedOrdersMinion(context);

                var result = Proxy.GetValue(
                    ShopsContainer.GetEntityView(orderId, "OrderEntitlements", string.Empty, string.Empty));
                result.Should().NotBeNull();
                result.Policies.Should().NotBeEmpty();
                result.Properties.Should().NotBeEmpty();
                result.ChildViews.Should().NotBeEmpty();
                foreach (var childView in result.ChildViews.Cast <EntityView>())
                {
                    childView.Should().NotBeNull();
                    childView.Policies.Should().BeEmpty();
                    childView.Properties.Should().NotBeEmpty();
                    childView.Properties.All(p => !string.IsNullOrEmpty(p.Value)).Should().BeTrue();
                    childView.ChildViews.Should().BeEmpty();
                }
            }
        }
Beispiel #7
0
        public static Task <string> Run(ShopperContext context, decimal quantity)
        {
            var watch = new Stopwatch();

            watch.Start();

            try
            {
                var container = context.ShopsContainer();

                Console.WriteLine($"Begin {ScenarioName}");

                var cartId = Guid.NewGuid().ToString("B");

                Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|7042259|57042259", quantity));

                var result = Proxy.DoCommand(
                    container.SetCartFulfillment(
                        cartId,
                        new ElectronicFulfillmentComponent
                {
                    FulfillmentMethod = new EntityReference
                    {
                        EntityTarget = "8A23234F-8163-4609-BD32-32D9DD6E32F5",
                        Name         = "Email"
                    },
                    EmailAddress = "*****@*****.**",
                    EmailContent = "this is the content of the email"
                }));

                var totals = result.Models.OfType <Sitecore.Commerce.Plugin.Carts.Totals>().FirstOrDefault();
                totals.Should().NotBeNull();
                totals?.GrandTotal.Should().NotBeNull();
                totals?.GrandTotal.Amount.Should().NotBe(0);

                var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount);
                result = Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));
                totals = result.Models.OfType <Sitecore.Commerce.Plugin.Carts.Totals>().FirstOrDefault();
                totals.Should().NotBeNull();
                totals?.GrandTotal.Should().NotBeNull();
                totals?.GrandTotal.Amount.Should().NotBe(0);
                totals?.PaymentsTotal.Should().NotBeNull();
                totals?.PaymentsTotal.Amount.Should().NotBe(0);

                var order = Orders.CreateAndValidateOrder(container, cartId, context);
                order.Status.Should().NotBe("Problem");
                order.Totals.GrandTotal.Amount.Should().Be(totals.GrandTotal.Amount);

                watch.Stop();
                Console.WriteLine($"End {ScenarioName} (${order.Totals.GrandTotal.Amount}):{watch.ElapsedMilliseconds} ms");

                return(Task.FromResult(order.Id));
            }
            catch (Exception ex)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                return(null);
            }
        }
Beispiel #8
0
        public static void RunSettleSalesActivitiesMinion(ShopperContext context)
        {
            Console.WriteLine("Begin RunSettleSalesActivitiesMinion");

            var policies =
                new Collection <CommerceOps.Sitecore.Commerce.Core.Policy>
            {
                new CommerceOps.Sitecore.Commerce.Core.RunMinionPolicy {
                    RunChildren = false
                }
            };
            var result = Proxy.GetValue(
                new MinionRunner().Context.MinionsContainer()
                .RunMinion("Sitecore.Commerce.Plugin.Orders.SettleSalesActivitiesMinion, Sitecore.Commerce.Plugin.Orders", ResolveMinionEnvironment(context), policies));

            if (result.ResponseCode.Equals("Error", StringComparison.OrdinalIgnoreCase))
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"RunSettleSalesActivitiesMinion: {result.Messages.FirstOrDefault(m => m.Code.Equals("Error", StringComparison.Ordinal))?.Text}");
            }

            result = Proxy.GetValue(
                new MinionRunner().Context.MinionsContainer()
                .RunMinion("Sitecore.Commerce.Plugin.Orders.SettleSalesActivitiesMinion, Sitecore.Commerce.Plugin.Orders", "HabitatMinions", policies));

            if (result.ResponseCode.Equals("Error", StringComparison.OrdinalIgnoreCase))
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"RunSettleSalesActivitiesMinion: {result.Messages.FirstOrDefault(m => m.Code.Equals("Error", StringComparison.Ordinal))?.Text}");
            }
        }
Beispiel #9
0
        public static void RunScenarios()
        {
            using (new SampleScenarioScope("Returns"))
            {
                var steve = new AnonymousCustomerSteve();
                _context = steve.Context;

                var order  = CreateCompletedOrder();
                var lineId = order.Lines.FirstOrDefault()?.Id;
                RequestRmaLineValidation(order.Id, "invalidlineid", 1); // invalid line id
                RequestRmaLineValidation(order.Id, lineId, -1);         // returning -1 out of 1 available
                RequestRmaLineValidation(order.Id, lineId, 0);          // returning 0 out of 1 available
                var rmaFriendlyId = RequestRma(order.Id, lineId, 1);
                RequestRmaLineValidation(order.Id, lineId, 3);          // returning 3 out of 2 available

                ReturnedItemReceivedValidation("invalidrmaid");         // invalid rma id
                ReturnedItemReceived(_context.ShopsContainer(), rmaFriendlyId, order.Id, lineId);
                ReturnedItemReceivedValidation(rmaFriendlyId);          // rma invalid status

                RunRefundRmasMinion(_context.ShopsContainer(), $"Entity-ReturnMerchandiseAuthorization-{rmaFriendlyId}", EnvironmentConstants.HabitatMinions);

                rmaFriendlyId = RequestRma(order.Id, lineId, 2);

                RequestRmaLineValidation(order.Id, order.Lines.FirstOrDefault()?.Id, 1); // returning 1 out of 0 available
                ReturnedItemReceived(_context.ShopsContainer(), rmaFriendlyId, order.Id, lineId);

                RequestDigitalRma();
            }
        }
        public static string Run(ShopperContext context)
        {
            using (new SampleBuyScenarioScope())
            {
                try
                {
                    var container = context.ShopsContainer();

                    var cartId = Carts.GenerateCartId();

                    Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW098 04|5", 1));

                    Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW475 14|", 1));

                    Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW475 14|", 1));

                    var updatedCart = Proxy.GetValue(container.Carts.ByKey(cartId).Expand("Lines"));

                    var cartLineComponent =
                        updatedCart.Lines.FirstOrDefault(l => l.ItemId.Equals("Adventure Works Catalog|AW475 14|"));
                    if (cartLineComponent != null)
                    {
                        Proxy.DoCommand(container.RemoveCartLine(cartId, cartLineComponent.Id));
                    }

                    var commandResponse = Proxy.DoCommand(
                        container.SetCartFulfillment(
                            cartId,
                            context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                    var totals = commandResponse.Models.OfType <Totals>().First();

                    var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                    paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount);

                    commandResponse = Proxy.DoCommand(
                        container.AddFederatedPayment(
                            cartId,
                            paymentComponent));

                    totals = commandResponse.Models.OfType <Totals>().First();

                    totals.PaymentsTotal.Amount.Should().Be(totals.GrandTotal.Amount);

                    var order = Orders.CreateAndValidateOrder(container, cartId, context);

                    order.Totals.GrandTotal.Amount.Should().Be(115.50M);

                    return(order.Id);
                }
                catch (Exception ex)
                {
                    ConsoleExtensions.WriteColoredLine(
                        ConsoleColor.Red,
                        $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                    return(null);
                }
            }
        }
        public static string Run(ShopperContext context)
        {
            using (new SampleBuyScenarioScope())
            {
                try
                {
                    var container = context.ShopsContainer();

                    var cartId = Carts.GenerateCartId();

                    // Add Cart Line with Variant
                    Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW098 04|5", 1));

                    // Add Cart Line without Variant
                    Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW475 14|", 1));

                    Proxy.DoCommand(container.AddCouponToCart(cartId, "RTRNC15P"));

                    var commandResult = Proxy.DoCommand(
                        container.SetCartFulfillment(
                            cartId,
                            context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                    var totals = commandResult.Models.OfType <Totals>().First();

                    var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                    paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount);
                    commandResult           = Proxy.DoCommand(
                        container.AddFederatedPayment(
                            cartId,
                            paymentComponent));

                    totals = commandResult.Models.OfType <Totals>().First();
                    totals.Should().NotBeNull();

                    var order = Orders.CreateAndValidateOrder(container, cartId, context);

                    var orderSummary = Proxy.GetValue(
                        container.GetEntityView(order.Id, "Master", string.Empty, string.Empty));

                    // Show that the coupon used is part of the view when a business user looks at an order
                    orderSummary.ChildViews.OfType <EntityView>()
                    .First(p => p.Name == "Summary")
                    .Properties.FirstOrDefault(p => p.Name == "CouponUsed")
                    .Should()
                    .NotBeNull();
                    order.Totals.GrandTotal.Amount.Should().Be(155.80M);

                    return(order.Id);
                }
                catch (Exception ex)
                {
                    ConsoleExtensions.WriteColoredLine(
                        ConsoleColor.Red,
                        $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                    return(null);
                }
            }
        }
Beispiel #12
0
        public static string Run(ShopperContext context, decimal quantity)
        {
            using (new SampleBuyScenarioScope())
            {
                try
                {
                    var container = context.ShopsContainer();

                    var cartId = Carts.GenerateCartId();

                    //// subscription
                    Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042453|56042453", quantity));

                    //// gift card
                    Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042986|56042988", quantity));

                    //// warranty
                    Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|7042259|57042259", quantity));

                    //// installation
                    Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042558|56042558", quantity));

                    Proxy.DoCommand(
                        container.SetCartFulfillment(
                            cartId,
                            new ElectronicFulfillmentComponent
                    {
                        Id = Guid.NewGuid().ToString(),
                        FulfillmentMethod = new EntityReference
                        {
                            EntityTarget = "8A23234F-8163-4609-BD32-32D9DD6E32F5",
                            Name         = "Email"
                        },
                        EmailAddress = "*****@*****.**",
                        EmailContent = "this is the content of the email"
                    }));

                    var cart = Carts.GetCart(cartId, context);
                    cart.Should().NotBeNull();

                    var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                    paymentComponent.Amount = Money.CreateMoney(cart.Totals.GrandTotal.Amount);
                    Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));

                    var order = Orders.CreateAndValidateOrder(container, cartId, context);
                    order.Status.Should().NotBe("Problem");
                    order.Totals.GrandTotal.Amount.Should().Be(cart.Totals.GrandTotal.Amount);

                    return(order.Id);
                }
                catch (Exception ex)
                {
                    ConsoleExtensions.WriteColoredLine(
                        ConsoleColor.Red,
                        $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                    return(null);
                }
            }
        }
Beispiel #13
0
        public static Cart GetCart(string cartId, ShopperContext context = null)
        {
            var container = context != null?context.ShopsContainer() : ShopsContainer;

            var cart = Proxy.GetValue(container.Carts.ByKey(cartId).Expand("Lines($expand=CartLineComponents),Components"));

            return(cart);
        }
        public static string Run(ShopperContext context)
        {
            using (new SampleBuyScenarioScope())
            {
                try
                {
                    var container = context.ShopsContainer();

                    var cartId = Carts.GenerateCartId();

                    var commandResponse = Proxy.DoCommand(
                        container.AddCartLine(cartId, "Adventure Works Catalog|22565422120|100", 1));
                    var firstLineId = commandResponse.Models.OfType <LineAdded>().FirstOrDefault()?.LineId;

                    commandResponse = Proxy.DoCommand(
                        container.AddCartLine(cartId, "Adventure Works Catalog|AW188 06|19", 1));
                    var secondLineId = commandResponse.Models.OfType <LineAdded>().FirstOrDefault()?.LineId;

                    Proxy.DoCommand(
                        container.SetCartLineFulfillment(
                            cartId,
                            firstLineId,
                            context.Components.OfType <ElectronicFulfillmentComponent>().First()));
                    commandResponse = Proxy.DoCommand(
                        container.SetCartLineFulfillment(
                            cartId,
                            secondLineId,
                            context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                    var totals = commandResponse.Models.OfType <Totals>().First();
                    totals.AdjustmentsTotal.Amount.Should().Be(0M);
                    totals.GrandTotal.Amount.Should().Be(229M);

                    // Add a Payment
                    var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                    paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount - totals.PaymentsTotal.Amount);
                    commandResponse         = Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));
                    totals = commandResponse.Models.OfType <Totals>().First();
                    totals.PaymentsTotal.Amount.Should().Be(229M);

                    // Get the cart one last time before creating the order
                    var cart = Carts.GetCart(cartId, context);
                    cart.Version.Should().Be(5);
                    var order = Orders.CreateAndValidateOrder(container, cartId, context);
                    order.Status.Should().NotBe("Problem");
                    order.Totals.GrandTotal.Amount.Should().Be(229M);

                    return(order.Id);
                }
                catch (Exception ex)
                {
                    ConsoleExtensions.WriteColoredLine(
                        ConsoleColor.Red,
                        $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                    return(null);
                }
            }
        }
Beispiel #15
0
        public static Task <string> Run(ShopperContext context)
        {
            var watch = new Stopwatch();

            watch.Start();

            try
            {
                var container = context.ShopsContainer();

                Console.WriteLine($"Begin {ScenarioName}");

                var cartId = Guid.NewGuid().ToString("B");

                Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW188 06|19", 1));

                Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW188 06|20", 1));

                // Add Cart Level Physical Fulfillment
                var commandResponse = Proxy.DoCommand(
                    container.SetCartFulfillment(
                        cartId,
                        context.Components.OfType <PhysicalFulfillmentComponent>().First()));
                var totals = commandResponse.Models.OfType <Totals>().First();
                totals.AdjustmentsTotal.Amount.Should().Be(19M);
                totals.GrandTotal.Amount.Should().Be(209M);

                var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount - totals.PaymentsTotal.Amount);

                // Add a Payment
                commandResponse = Proxy.DoCommand(
                    container.AddFederatedPayment(cartId, paymentComponent));
                totals = commandResponse.Models.OfType <Totals>().First();

                totals.PaymentsTotal.Amount.Should().Be(209M);

                // Get the cart one last time before creating the order
                var cart = Carts.GetCart(cartId, context);
                cart.Version.Should().Be(4);

                var order = Orders.CreateAndValidateOrder(container, cartId, context);
                order.Status.Should().NotBe("Problem");
                order.Totals.GrandTotal.Amount.Should().Be(209M);

                watch.Stop();
                Console.WriteLine($"End {ScenarioName} (${order.Totals.GrandTotal.Amount}):{watch.ElapsedMilliseconds} ms");

                return(Task.FromResult(order.Id));
            }
            catch (Exception ex)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                return(null);
            }
        }
Beispiel #16
0
        public static Task <string> Run(ShopperContext context)
        {
            var watch = new Stopwatch();

            watch.Start();

            try
            {
                var container = context.ShopsContainer();

                Console.WriteLine($"Begin {ScenarioName}");

                var cartId = Guid.NewGuid().ToString("B");

                // First retrieve GiftCard as a SellableItem
                Proxy.GetValue(container.SellableItems.ByKey("Adventure Works Catalog,22565422120,100").Expand("Components($expand=ChildComponents($expand=ChildComponents))"));

                Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|22565422120|100", 1));
                Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|22565422120|050", 1));

                Proxy.DoCommand(
                    container.SetCartFulfillment(
                        cartId,
                        new ElectronicFulfillmentComponent
                {
                    FulfillmentMethod = new EntityReference
                    {
                        EntityTarget = "8A23234F-8163-4609-BD32-32D9DD6E32F5",
                        Name         = "Email"
                    },
                    EmailAddress = "*****@*****.**",
                    EmailContent = "this is the content of the email"
                }));

                // Add a Payment
                var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                paymentComponent.Amount = Money.CreateMoney(150);
                Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));

                var order = Orders.CreateAndValidateOrder(container, cartId, context);
                order.Status.Should().NotBe("Problem");
                order.Totals.GrandTotal.Amount.Should().Be(150.00000M);

                Proxy.GetEntityView(container, order.Id, "Master", string.Empty, string.Empty);

                watch.Stop();
                Console.WriteLine($"End {ScenarioName} (${order.Totals.GrandTotal.Amount}):{watch.ElapsedMilliseconds} ms");

                return(Task.FromResult(order.Id));
            }
            catch (Exception ex)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                return(null);
            }
        }
        public static Task <string> Run(ShopperContext context)
        {
            var watch = new Stopwatch();

            watch.Start();

            try
            {
                var container = context.ShopsContainer();

                Console.WriteLine($"Begin {ScenarioName}");

                var cartId = Guid.NewGuid().ToString("B");

                //Habitat NextCube-V Game Cube 1TB
                var gameSystemLine = Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042432|56042432", 1));

                //Habitat NextCube Now  6 month On-Demand Multigame Subscription
                var subscriptionLine = Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042456|56042456", 1));

                var gameSystemLineFulfillmentResponse = Proxy.DoCommand(container.SetCartLineFulfillment(cartId,
                                                                                                         gameSystemLine.Models.OfType <LineAdded>().FirstOrDefault().LineId,
                                                                                                         context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                Proxy.DoCommand(
                    container.SetCartLineFulfillment(
                        cartId,
                        subscriptionLine.Models.OfType <LineAdded>().FirstOrDefault().LineId,
                        context.Components.OfType <ElectronicFulfillmentComponent>().First()
                        )
                    );

                var cart = Carts.GetCart(cartId, context);
                cart.Should().NotBeNull();

                var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                paymentComponent.Amount = cart.Totals.GrandTotal;
                Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));

                var order = Orders.CreateAndValidateOrder(container, cartId, context);
                order.Status.Should().NotBe("Problem");
                order.Totals.GrandTotal.Amount.Should().Be(cart.Totals.GrandTotal.Amount);

                watch.Stop();
                Console.WriteLine($"End {ScenarioName} (${order.Totals.GrandTotal.Amount}):{watch.ElapsedMilliseconds} ms");

                return(Task.FromResult(order.Id));
            }
            catch (Exception ex)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                return(null);
            }
        }
Beispiel #18
0
        public static string Run(ShopperContext context)
        {
            using (new SampleBuyScenarioScope())
            {
                try
                {
                    var container = context.ShopsContainer();

                    var cartId = Carts.GenerateCartId();

                    // Add Cart Line with Variant
                    var commandResult = Proxy.DoCommand(
                        container.AddCartLine(cartId, "Adventure Works Catalog|AW098 04|5", 1));
                    var cartLineId1 = commandResult.Models.OfType <LineAdded>().FirstOrDefault()?.LineId;

                    // Add Cart Line without Variant
                    commandResult = Proxy.DoCommand(
                        container.AddCartLine(cartId, "Adventure Works Catalog|AW475 14|", 1));
                    var cartLineId2 = commandResult.Models.OfType <LineAdded>().FirstOrDefault()?.LineId;

                    commandResult = Proxy.DoCommand(
                        container.SetCartLineFulfillment(
                            cartId,
                            cartLineId1,
                            context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                    var totals = commandResult.Models.OfType <Totals>().First();

                    commandResult = Proxy.DoCommand(
                        container.SetCartLineFulfillment(
                            cartId,
                            cartLineId2,
                            context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                    totals = commandResult.Models.OfType <Totals>().First();

                    var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                    paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount - totals.PaymentsTotal.Amount);
                    Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));

                    var order = Orders.CreateAndValidateOrder(container, cartId, context);
                    order.Totals.GrandTotal.Amount.Should().Be(180.40M);

                    return(order.Id);
                }
                catch (Exception ex)
                {
                    ConsoleExtensions.WriteColoredLine(
                        ConsoleColor.Red,
                        $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                    return(null);
                }
            }
        }
Beispiel #19
0
        private static void BuyWarranty(ShopperContext context)
        {
            var orderId = Scenarios.BuyWarranty.Run(context, 1).Result;

            orderId.Should().NotBeNull();

            RunMinions(context);

            var order = ValidateOrder(context, orderId);

            ValidateEntitlements(context, order, null, 1, typeof(Warranty));
        }
Beispiel #20
0
        private static void BuyOneOfEach(ShopperContext context)
        {
            var orderId = Scenarios.BuyAllDigitals.Run(context, 1).Result;

            orderId.Should().NotBeNull();

            RunMinions(context);

            var order = ValidateOrder(context, orderId);

            ValidateEntitlements(context, order, null, 4);
        }
Beispiel #21
0
        private static void BuySubscription(ShopperContext context)
        {
            var orderId = Scenarios.BuySubscription.Run(context, 1).Result;

            orderId.Should().NotBeNull();

            RunMinions(context);

            var order = ValidateOrder(context, orderId);

            ValidateEntitlements(context, order, null, 1, typeof(DigitalProduct));
        }
Beispiel #22
0
        private static void BuyGiftCard(ShopperContext context)
        {
            var orderId = Scenarios.BuyGiftCard.Run(context, 2).Result;

            orderId.Should().NotBeNull();

            RunMinions(context);

            var order = ValidateOrder(context, orderId);

            ValidateEntitlements(context, order, null, 2, typeof(GiftCard));
        }
Beispiel #23
0
        private static void BuyPhysicalAndGiftCard(ShopperContext context)
        {
            var orderId = Scenarios.Simple2PhysicalDigitalItems.Run(context).Result;

            orderId.Should().NotBeNull();

            RunMinions(context);

            var order = ValidateOrder(context, orderId);

            ValidateEntitlements(context, order, null, 1, typeof(GiftCard));
        }
Beispiel #24
0
        public static void RunPendingOrdersMinion(ShopperContext context)
        {
            Console.WriteLine("Begin RunPendingOrdersMinion");

            var result = Proxy.GetValue(new MinionRunner().Context.MinionsContainer()
                                        .RunMinion("Sitecore.Commerce.Plugin.Orders.PendingOrdersMinionBoss, Sitecore.Commerce.Plugin.Orders", ResolveMinionEnvironment(context), null));

            if (result.ResponseCode.Equals("Error", StringComparison.OrdinalIgnoreCase))
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"RunPendingOrdersMinion: {result.Messages.FirstOrDefault(m => m.Code.Equals("Error", StringComparison.Ordinal))?.Text}");
            }
        }
Beispiel #25
0
        public static string Run(ShopperContext context)
        {
            using (new SampleBuyScenarioScope())
            {
                try
                {
                    var container = context.ShopsContainer();

                    var cartId = Carts.GenerateCartId();

                    //Habitat NextCube-V Game Cube 1TB
                    var gameSystemLine =
                        Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042432|56042432", 1));

                    //Habitat NextCube Now  6 month On-Demand multi game Subscription
                    var subscriptionLine =
                        Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042456|56042456", 1));

                    Proxy.DoCommand(
                        container.SetCartLineFulfillment(
                            cartId,
                            gameSystemLine.Models.OfType <LineAdded>().FirstOrDefault().LineId,
                            context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                    Proxy.DoCommand(
                        container.SetCartLineFulfillment(
                            cartId,
                            subscriptionLine.Models.OfType <LineAdded>().FirstOrDefault().LineId,
                            context.Components.OfType <ElectronicFulfillmentComponent>().First()));

                    var cart = Carts.GetCart(cartId, context);
                    cart.Should().NotBeNull();

                    var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                    paymentComponent.Amount = cart.Totals.GrandTotal;
                    Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));

                    var order = Orders.CreateAndValidateOrder(container, cartId, context);
                    order.Status.Should().NotBe("Problem");
                    order.Totals.GrandTotal.Amount.Should().Be(cart.Totals.GrandTotal.Amount);

                    return(order.Id);
                }
                catch (Exception ex)
                {
                    ConsoleExtensions.WriteColoredLine(
                        ConsoleColor.Red,
                        $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                    return(null);
                }
            }
        }
Beispiel #26
0
        public static Task <string> Run(ShopperContext context)
        {
            var watch = new Stopwatch();

            watch.Start();

            try
            {
                var container = context.ShopsContainer();

                Console.WriteLine($"Begin {ScenarioName}");

                var cartId = Guid.NewGuid().ToString("B");

                //Request the SellableItem
                Proxy.GetValue(container.SellableItems.ByKey("Adventure Works Catalog,AW210 12,4").Expand("Components($expand=ChildComponents($expand=ChildComponents($expand=ChildComponents)))"));

                Proxy.DoCommand(container.AddCartLine(cartId, "Adventure Works Catalog|AW210 12|4", 1));

                var commandResult = Proxy.DoCommand(
                    container.SetCartFulfillment(cartId,
                                                 context.Components.OfType <PhysicalFulfillmentComponent>().First())
                    );

                var totals = commandResult.Models.OfType <Totals>().First();

                var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                paymentComponent.Amount = Money.CreateMoney(totals.GrandTotal.Amount);
                commandResult           = Proxy.DoCommand(
                    container.AddFederatedPayment(cartId,
                                                  paymentComponent)
                    );
                totals = commandResult.Models.OfType <Totals>().First();

                totals.PaymentsTotal.Amount.Should().Be(totals.GrandTotal.Amount);

                var order = Orders.CreateAndValidateOrder(container, cartId, context);

                watch.Stop();

                order.Totals.GrandTotal.Amount.Should().Be(233.20M);

                Console.WriteLine($"End {ScenarioName} (${order.Totals.GrandTotal.Amount}):{watch.ElapsedMilliseconds} ms");

                return(Task.FromResult(order.Id));
            }
            catch (Exception ex)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                return(null);
            }
        }
        public static Task <string> Run(ShopperContext context)
        {
            var watch = new Stopwatch();

            watch.Start();

            try
            {
                var container = context.ShopsContainer();

                Console.WriteLine($"Begin {ScenarioName}");

                var cartId = Guid.NewGuid().ToString("B");

                // Habitat Republic 32GB 4G LTE
                var phoneLine = Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042323|56042324", 1));

                // Habitat Shark Waterproof Smartphone Case
                var caseLine = Proxy.DoCommand(container.AddCartLine(cartId, "Habitat_Master|6042360|56042360", 1));

                Proxy.DoCommand(container.SetCartLineFulfillment(
                                    cartId,
                                    phoneLine.Models.OfType <LineAdded>().FirstOrDefault().LineId,
                                    context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                Proxy.DoCommand(container.SetCartLineFulfillment(
                                    cartId,
                                    caseLine.Models.OfType <LineAdded>().FirstOrDefault().LineId,
                                    context.Components.OfType <PhysicalFulfillmentComponent>().First()));

                var cart = Carts.GetCart(cartId, context);
                cart.Should().NotBeNull();

                var paymentComponent = context.Components.OfType <FederatedPaymentComponent>().First();
                paymentComponent.Amount = cart.Totals.GrandTotal;
                Proxy.DoCommand(container.AddFederatedPayment(cartId, paymentComponent));

                var order = Orders.CreateAndValidateOrder(container, cartId, context);
                order.Status.Should().NotBe("Problem");
                order.Totals.GrandTotal.Amount.Should().Be(cart.Totals.GrandTotal.Amount);

                watch.Stop();
                Console.WriteLine($"End {ScenarioName} (${order.Totals.GrandTotal.Amount}):{watch.ElapsedMilliseconds} ms");

                return(Task.FromResult(order.Id));
            }
            catch (Exception ex)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, $"Exception in Scenario {ScenarioName} (${ex.Message}) : Stack={ex.StackTrace}");
                return(null);
            }
        }
Beispiel #28
0
 public MinionRunner()
 {
     Context = new ShopperContext
     {
         Shop          = Program.DefaultStorefront,
         ShopperId     = "MinionRunnerShopperId",
         Language      = "en-US",
         Currency      = "USD",
         PolicyKeys    = "ZeroMinionDelay|xActivityPerf",
         EffectiveDate = DateTimeOffset.Now,
         Components    = new List <Component>()
     };
 }
        private static void BuyGiftCards(ShopperContext context)
        {
            using (new SampleMethodScope())
            {
                var orderId = Scenarios.BuyGiftCards.Run(context);
                orderId.Should().NotBeNull();

                RunMinions(context);

                var order = ValidateOrder(context, orderId);
                ValidateEntitlements(context, order, null, 2, typeof(GiftCard));
            }
        }
        private static void BuyPhysicalAndGiftCard(ShopperContext context)
        {
            using (new SampleMethodScope())
            {
                var orderId = Simple2PhysicalDigitalItems.Run(context);
                orderId.Should().NotBeNull();

                RunMinions(context);

                var order = ValidateOrder(context, orderId);
                ValidateEntitlements(context, order, null, 1, typeof(GiftCard));
            }
        }