예제 #1
0
        public void CreateRefundForUnFinalizedProposedOrder()
        {
            int availableDiscountCents = ClientModuleIntegrationTestingUtilities.GetAvailableDiscountCredit(LevelUpTestConfiguration.Current.ConsumerQrData);

            const int giftCardAmountToUseInCents = 1000;

            ClientModuleIntegrationTestingUtilities.RemoveAnyGiftCardCreditOnConsumerUserAccount();
            ClientModuleIntegrationTestingUtilities.AddGiftCardCreditOnConsumerUserAccount(giftCardAmountToUseInCents);

            const int taxAmountInCents  = 100;
            int       costOfItemInCents = availableDiscountCents + giftCardAmountToUseInCents + taxAmountInCents + 500;

            IManageProposedOrders orderClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IManageProposedOrders>();
            var proposedOrder = orderClient.CreateProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                LevelUpTestConfiguration.Current.ConsumerQrData,
                                                                costOfItemInCents,
                                                                costOfItemInCents,
                                                                taxAmountInCents,
                                                                0, null, null, null, null, true, null);

            ICreateRefund refundClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <ICreateRefund>();

            refundClient.RefundOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                     proposedOrder.ProposedOrderIdentifier);
        }
예제 #2
0
        public void ProposedOrderWith10PercentTip_ShouldSucceed()
        {
            const int spendAmountCents = 10;
            const int tipAmountCents   = 1; // 10%

            IManageProposedOrders orderClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IManageProposedOrders>();
            var proposedOrder = orderClient.CreateProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                LevelUpTestConfiguration.Current.ConsumerQrDataWith10PercentTip,
                                                                spendAmountCents, spendAmountCents,
                                                                0, 0, null, null, null, null, true, false, null);

            var completedOrder = orderClient.CompleteProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                   LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                   LevelUpTestConfiguration.Current.ConsumerQrDataWith10PercentTip,
                                                                   proposedOrder.ProposedOrderIdentifier,
                                                                   spendAmountCents, spendAmountCents,
                                                                   0, 0, proposedOrder.DiscountAmountCents, null, null, null, null, true, false, null);

            Assert.AreEqual(completedOrder.TipAmount, tipAmountCents);

            var refundClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <ICreateRefund>();

            refundClient.RefundOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken, completedOrder.OrderIdentifier);
        }
예제 #3
0
        public void ProposedOrderWithNoPartialAuth_ShouldThrow_ForInsufficientCredit()
        {
            int giftCardAmount = 1000;

            ClientModuleIntegrationTestingUtilities.RemoveAnyGiftCardCreditOnConsumerWithNoLinkedPaymentUserAccount();
            ClientModuleIntegrationTestingUtilities.AddGiftCardCreditOnConsumerWithNoLinkedPaymentUserAccount(giftCardAmount);

            var discountCredit = ClientModuleIntegrationTestingUtilities.GetAvailableDiscountCredit(LevelUpTestConfiguration.Current.ConsumerWithNoLinkedPaymentQrData);

            int spendAmount = (1000 + giftCardAmount + discountCredit);


            IManageProposedOrders orderClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IManageProposedOrders>();

            Assert.Throws <LevelUpApiException>(() =>
            {
                var proposedOrder = orderClient.CreateProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                    LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                    LevelUpTestConfiguration.Current.ConsumerWithNoLinkedPaymentQrData,
                                                                    spendAmount, spendAmount, 0, 0, null, null, null, null, false, false, null);

                var completedOrder = orderClient.CompleteProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                       LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                       LevelUpTestConfiguration.Current.ConsumerWithNoLinkedPaymentQrData,
                                                                       proposedOrder.ProposedOrderIdentifier,
                                                                       spendAmount, spendAmount, 0, 0, proposedOrder.DiscountAmountCents, null, null, null, null, false, false, null);
            });
        }
예제 #4
0
        public void ProposedOrderWithPartialAuth_ShouldSucceed()
        {
            int giftCardAmount = 1000;

            ClientModuleIntegrationTestingUtilities.RemoveAnyGiftCardCreditOnConsumerWithNoLinkedPaymentUserAccount();
            ClientModuleIntegrationTestingUtilities.AddGiftCardCreditOnConsumerWithNoLinkedPaymentUserAccount(giftCardAmount);

            var credit = ClientModuleIntegrationTestingUtilities.GetAvailableDiscountCredit(LevelUpTestConfiguration.Current.ConsumerWithNoLinkedPaymentQrData);

            int spendAmount = (1000 + giftCardAmount + credit);


            IManageProposedOrders orderClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IManageProposedOrders>();
            var proposedOrder = orderClient.CreateProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                LevelUpTestConfiguration.Current.ConsumerWithNoLinkedPaymentQrData,
                                                                spendAmount, spendAmount, 0, 0, null, null, null, null, true, false, null);

            Assert.AreEqual(proposedOrder.DiscountAmountCents, credit);

            var completedOrder = orderClient.CompleteProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                   LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                   LevelUpTestConfiguration.Current.ConsumerWithNoLinkedPaymentQrData,
                                                                   proposedOrder.ProposedOrderIdentifier,
                                                                   spendAmount, spendAmount, 0, 0, proposedOrder.DiscountAmountCents, null, null, null, null, true, false, null);

            Assert.AreEqual(completedOrder.SpendAmount, credit + giftCardAmount);
            Assert.AreNotEqual(completedOrder.SpendAmount, spendAmount);

            ICreateRefund refundClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <ICreateRefund>();

            refundClient.RefundOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken, completedOrder.OrderIdentifier);
        }
        public void ProposedOrderWithBadQrCode_ShouldThrow()
        {
            IManageProposedOrders orderClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IManageProposedOrders>();

            orderClient.CreateProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                            LevelUpTestConfiguration.Current.MerchantLocationId, "bad_qr_code", 10, 10, 0, 0);
        }
예제 #6
0
        internal static int GetAvailableDiscountCredit(string qrData)
        {
            IManageProposedOrders orderClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IManageProposedOrders>();

            var proposedOrder = orderClient.CreateProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                qrData, int.MaxValue, int.MaxValue, 0, 0, null, null, null, null, true, false, null);

            return(proposedOrder.DiscountAmountCents);
        }
예제 #7
0
        public void CompleteProposedOrderShouldSucceedForDiscountsDisabled()
        {
            string expectedRequestUrl = ClientModuleFunctionalTestingUtilities.SANDBOX_URL_PREFIX + "/v15/completed_orders";

            string expectedRequest = "{" +
                                     "\"completed_order\": {" +
                                     "\"applied_discount_amount\": null," +
                                     "\"cashier\": \"Bob\"," +
                                     "\"exemption_amount\": 40," +
                                     "\"identifier_from_merchant\": \"001001\"," +
                                     "\"location_id\": 19," +
                                     "\"partial_authorization_allowed\": false," +
                                     "\"payment_token_data\": \"LU02000008ZS9OJFUBNEL6ZM030000LU\"," +
                                     "\"proposed_order_uuid\": \"1b3b3c4d5e6f7g8a9i9h8g7f6e5d4c3b2a1\"," +
                                     "\"receipt_message_html\": \"Pick up your order at <strong>counter #4</strong>\"," +
                                     "\"register\": \"3\"," +
                                     "\"spend_amount\": 200," +
                                     "\"tax_amount\": 0," +
                                     GetSampleItems().Item1 +
                                     "}" +
                                     "}";

            RestResponse expectedResponse = new RestResponse
            {
                StatusCode = HttpStatusCode.OK,
                Content    = "{ " +
                             "\"order\": { " +
                             "\"gift_card_total_amount\": 0, " +
                             "\"gift_card_tip_amount\": 0, " +
                             "\"spend_amount\": 200, " +
                             "\"tip_amount\": 0, " +
                             "\"total_amount\": 200, " +
                             "\"uuid\": \"5a1z9x2h31ah7g8a9i9h8g7f6e5d4c4a21o\"" +
                             "}" +
                             "}"
            };

            var items = GetSampleItems().Item2;

            IManageProposedOrders client = ClientModuleFunctionalTestingUtilities.GetMockedLevelUpModule <IManageProposedOrders, CompleteProposedOrderRequest>(
                expectedResponse, expectedRequest, expectedRequestUrl: expectedRequestUrl);
            var completedOrder = client.CompleteProposedOrder("not_checking_this", 19, "LU02000008ZS9OJFUBNEL6ZM030000LU",
                                                              "1b3b3c4d5e6f7g8a9i9h8g7f6e5d4c3b2a1", 300, 200, 10, 130, null, "3", "Bob", "001001",
                                                              "Pick up your order at <strong>counter #4</strong>", false, false, items);

            Assert.AreEqual(completedOrder.GiftCardTotalAmount, 0);
            Assert.AreEqual(completedOrder.GiftCardTipAmount, 0);
            Assert.AreEqual(completedOrder.SpendAmount, 200);
            Assert.AreEqual(completedOrder.TipAmount, 0);
            Assert.AreEqual(completedOrder.Total, 200);
            Assert.AreEqual(completedOrder.OrderIdentifier, "5a1z9x2h31ah7g8a9i9h8g7f6e5d4c4a21o");
        }
예제 #8
0
        public void ProposedOrderWithDiscountAndGiftCard_ShouldSucceed()
        {
            int availableDiscountCents = ClientModuleIntegrationTestingUtilities.GetAvailableDiscountCredit(LevelUpTestConfiguration.Current.ConsumerQrData);

            const int giftCardAmountToUseInCents = 1000;

            ClientModuleIntegrationTestingUtilities.RemoveAnyGiftCardCreditOnConsumerUserAccount();
            ClientModuleIntegrationTestingUtilities.AddGiftCardCreditOnConsumerUserAccount(giftCardAmountToUseInCents);

            const int taxAmountInCents = 100;

            // Make sure that gift card, credit card, and discount(if available) will all be requried as part of this test payment.
            int costOfItemInCents = availableDiscountCents + giftCardAmountToUseInCents + taxAmountInCents + 500;

            IManageProposedOrders orderClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IManageProposedOrders>();
            var proposedOrder = orderClient.CreateProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                LevelUpTestConfiguration.Current.ConsumerQrData,
                                                                costOfItemInCents,
                                                                costOfItemInCents,
                                                                taxAmountInCents,
                                                                0, null, null, null, null, true, false, null);

            Assert.AreEqual(proposedOrder.DiscountAmountCents, availableDiscountCents);
            int taxAmountAfterDiscountApplied = (taxAmountInCents * (costOfItemInCents - proposedOrder.DiscountAmountCents)) / costOfItemInCents;

            var completedOrder = orderClient.CompleteProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                   LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                   LevelUpTestConfiguration.Current.ConsumerQrData,
                                                                   proposedOrder.ProposedOrderIdentifier,
                                                                   costOfItemInCents,
                                                                   costOfItemInCents,
                                                                   taxAmountAfterDiscountApplied,
                                                                   0,
                                                                   proposedOrder.DiscountAmountCents,
                                                                   null, null, null, null, true, false, null);

            Assert.AreEqual(completedOrder.GiftCardTipAmount, 0);
            Assert.AreEqual(completedOrder.GiftCardTotalAmount, giftCardAmountToUseInCents);
            Assert.AreEqual(completedOrder.GiftCardTipAmount, 0);
            Assert.AreEqual(completedOrder.TipAmount, 0);
            Assert.AreEqual(completedOrder.SpendAmount, costOfItemInCents);

            ICreateRefund refundClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <ICreateRefund>();

            refundClient.RefundOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                     completedOrder.OrderIdentifier);
        }
예제 #9
0
        internal static CompletedOrderResponse PlaceOrderAtTestMerchantWithTestConsumer(int total = 100)
        {
            ClientModuleIntegrationTestingUtilities.RemoveAnyGiftCardCreditOnConsumerUserAccount();

            IManageProposedOrders orderClient = ClientModuleIntegrationTestingUtilities.GetSandboxedLevelUpModule <IManageProposedOrders>();
            var proposedOrder = orderClient.CreateProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                                LevelUpTestConfiguration.Current.MerchantLocationId,
                                                                LevelUpTestConfiguration.Current.ConsumerQrData,
                                                                total, total, 0, 0, null, null, null, null, true, false, null);

            return(orderClient.CompleteProposedOrder(ClientModuleIntegrationTestingUtilities.SandboxedLevelUpMerchantAccessToken,
                                                     LevelUpTestConfiguration.Current.MerchantLocationId,
                                                     LevelUpTestConfiguration.Current.ConsumerQrData,
                                                     proposedOrder.ProposedOrderIdentifier,
                                                     total, total, 0, 0, proposedOrder.DiscountAmountCents, null, null, null, null, true, false, null));
        }
예제 #10
0
        public void CreateProposedOrderShouldSucceedForSplitTender()
        {
            string expectedRequestUrl = ClientModuleFunctionalTestingUtilities.SANDBOX_URL_PREFIX + "/v15/proposed_orders";

            string expectedRequest = "{" +
                                     "\"proposed_order\": {" +
                                     "\"payment_token_data\": \"LU02000008ZS9OJFUBNEL6ZM030000LU\"," +
                                     "\"cashier\": \"Bob\"," +
                                     "\"exemption_amount\": 40," +
                                     "\"receipt_message_html\": null," +
                                     "\"register\": \"3\"," +
                                     "\"tax_amount\": 0," +
                                     "\"identifier_from_merchant\": \"001001\"," +
                                     "\"partial_authorization_allowed\": true," +
                                     "\"location_id\": 19," +
                                     "\"spend_amount\": 100," +
                                     GetSampleItems().Item1 +
                                     "}" +
                                     "}";

            RestResponse expectedResponse = new RestResponse
            {
                StatusCode = HttpStatusCode.OK,
                Content    = "{ \"proposed_order\": { \"discount_amount\": 2578, \"uuid\": \"1b3b3c4d5e6f7g8a9i9h8g7f6e5d4c3b2a1\"}}"
            };

            var items = GetSampleItems().Item2;

            IManageProposedOrders client = ClientModuleFunctionalTestingUtilities.GetMockedLevelUpModule <IManageProposedOrders, CreateProposedOrderRequest>(
                expectedResponse, expectedRequest, expectedRequestUrl: expectedRequestUrl);
            var proposedOrder = client.CreateProposedOrder("not_checking_this", 19, "LU02000008ZS9OJFUBNEL6ZM030000LU",
                                                           200, 100, 10, 130, "3", "Bob", "001001", null, true, false, items);

            Assert.AreEqual(proposedOrder.ProposedOrderIdentifier, "1b3b3c4d5e6f7g8a9i9h8g7f6e5d4c3b2a1");
            Assert.AreEqual(proposedOrder.DiscountAmountCents, 2578);
        }