public async Task ProcessSalesAdjustmentReversalAsync_Throws_When_Disposed()
        {
            var client = CreateTestClient();

            client.Dispose();

            var request = new ProcessAuthorisationRequest()
            {
                MerchantId = "30299999",
                DeviceId   = "d555",
                OperatorId = "test_operator",
                PosVersion = "123",
                ClientTransactionReference = "tnx-ref1",
                PreapprovalCode            = "6111NHQMAM4Z",
                FinanceAmount  = 100,
                PurchaseAmount = 500,
                PurchaseItems  = new PurchaseItemsCollection
                                 (
                    new string[]
                {
                    "Item1",
                    "Item2"
                }
                                 )
            };

            _ = await client.ProcessAuthorisationAsync(request);
        }
        public void Writes_Expected_ProcessAuthorisation_Request_With_Signature()
        {
            var sigGen = new Hmac256SignatureGenerator("dy33vQhksVsv");
            var writer = new SignedRequestWriter(sigGen);

            var request = new ProcessAuthorisationRequest()
            {
                MerchantId = "30299999",
                DeviceId   = "d555",
                OperatorId = "test_operator",
                PosVersion = "123",
                ClientTransactionReference = "tnx-ref1",
                PreapprovalCode            = "6111NHQMAM4Z",
                FinanceAmount  = 100,
                PurchaseAmount = 500,
                PurchaseItems  = new PurchaseItemsCollection
                                 (
                    new string[]
                {
                    "Item1",
                    "Item2"
                }
                                 )
            };

            var result = writer.WriteRequest(request);

            Assert.AreEqual("{\"x_pos_transaction_ref\":\"tnx-ref1\",\"x_pre_approval_code\":\"6111NHQMAM4Z\",\"x_finance_amount\":10000,\"x_purchase_amount\":50000,\"purchase_items\":\"{\\\"PurchaseItems\\\":[\\\"Item1\\\",\\\"Item2\\\"]}\",\"buyer_confirms\":false,\"x_merchant_id\":\"30299999\",\"x_device_id\":\"d555\",\"x_firmware_version\":\"123\",\"x_operator_id\":\"test_operator\",\"signature\":\"d6967970b99e585fc7d1a11702690f25b4be0c5fbfd10b39fbea3953ba48bad2\"}", result);
            Assert.IsTrue(result.Contains("d6967970b99e585fc7d1a11702690f25b4be0c5fbfd10b39fbea3953ba48bad2"));
        }
Example #3
0
        public async Task HummClient_ProcessAuthorisation_RaisesEvent_When_AutoHandlePendingResponse_True()
        {
            int requestCount = 0;

            var request = new ProcessAuthorisationRequest()
            {
                ClientTransactionReference = System.Guid.NewGuid().ToString(),
                PurchaseAmount             = 100,
                FinanceAmount   = 500,
                PreapprovalCode = "01000000",
                OperatorId      = "Yort",
                PurchaseItems   = new PurchaseItemsCollection()
                {
                    "Item1", "Item2"
                },
                BuyerConfirms             = true,
                AutoHandlePendingResponse = true,
                TrackingData = new Dictionary <string, string>()
                {
                    { "Key1", "Value1" }
                }
            };

            var handler = new MockHttpHandler
                          (
                (clientRequest) =>
            {
                requestCount++;
                if (requestCount >= 4)
                {
                    return(GetSuccessfulProcessAuthorisationResponse());
                }

                return(GetPendingProcessAuthorisationResponse(request));
            }
                          );
            var eventRaised = false;

            var client = CreateMockedClient(handler);

            client.PendingAuthorisation += (sender, e) =>
            {
                eventRaised = true;
                Assert.AreEqual(request.ClientTransactionReference, e.ClientReference);
                Assert.AreEqual(5, e.RetryDuration);
                Assert.AreEqual(request.TrackingData.Count, e.TrackingData.Count);
            };

            var sw = new System.Diagnostics.Stopwatch();

            sw.Start();
            var response = await client.ProcessAuthorisationAsync(request);

            sw.Stop();

            Assert.AreEqual(4, requestCount);
            Assert.IsTrue(sw.Elapsed.TotalSeconds >= 15);
            Assert.IsTrue(eventRaised);
        }
Example #4
0
        public async Task HummClient_ProcessAuthorisation_Returns_Pending_When_AutoHandlePendingResponse_False()
        {
            int requestCount = 0;

            var requestContent = new ProcessAuthorisationRequest()
            {
                ClientTransactionReference = System.Guid.NewGuid().ToString(),
                PurchaseAmount             = 100,
                FinanceAmount   = 500,
                PreapprovalCode = "01000000",
                OperatorId      = "Yort",
                PurchaseItems   = new PurchaseItemsCollection()
                {
                    "Item1", "Item2"
                },
                BuyerConfirms             = true,
                AutoHandlePendingResponse = false
            };

            var handler = new MockHttpHandler
                          (
                (clientRequest) =>
            {
                requestCount++;
                if (requestCount >= 4)
                {
                    return(GetSuccessfulProcessAuthorisationResponse());
                }

                return(GetPendingProcessAuthorisationResponse(requestContent));
            }
                          );

            var client = CreateMockedClient(handler);

            var sw = new System.Diagnostics.Stopwatch();

            sw.Start();
            var response = await client.ProcessAuthorisationAsync(requestContent);

            sw.Stop();

            Assert.AreEqual(1, requestCount);
            Assert.IsTrue(sw.Elapsed.TotalSeconds <= 1);
            Assert.AreEqual(RequestStates.Pending, response.Status);
        }
Example #5
0
        public async Task ProcessAuthorisationAsync_Validates_PreapprovalCode_NotOverLength()
        {
            var client = CreateTestClient();

            var request = new ProcessAuthorisationRequest()
            {
                ClientTransactionReference = "1234567890123456789012345678901234567890123456789012345678901234567890",
                PreapprovalCode            = "1234567890",
                PurchaseAmount             = 10,
                FinanceAmount = 10,
                PurchaseItems = new PurchaseItemsCollection()
                {
                    "Item1", "Item2"
                }
            };

            _ = await client.ProcessAuthorisationAsync(request);
        }
Example #6
0
        public void ProcessAuthorisationRequest_Validates_Ok_When_Valid()
        {
            var request = new ProcessAuthorisationRequest()
            {
                OperatorId = "Yort",
                DeviceId   = Environment.GetEnvironmentVariable("Humm_Test_Sandbox_DeviceId"),
                MerchantId = Environment.GetEnvironmentVariable("Humm_Test_Sandbox_MerchantId"),
                PosVersion = "1.0",
                ClientTransactionReference = "12345678901234567890",
                PreapprovalCode            = "1234567890",
                PurchaseAmount             = 10,
                FinanceAmount = 10,
                PurchaseItems = new PurchaseItemsCollection()
                {
                    "Item1", "Item2"
                }
            };

            request.Validate();
        }
Example #7
0
        private Task <HttpResponseMessage> GetPendingProcessAuthorisationResponse(ProcessAuthorisationRequest request)
        {
            var responseContent = new ProcessAuthorisationResponse()
            {
                Code          = "SPRA01",
                Status        = RequestStates.Pending,
                Message       = "Pending",
                RetryDuration = 5,
                Signature     = "bb5bb8418bff30eacaa841e7b7d0fba94a5b40bb1ce9283c1b26511ade34f719"
            };

            if (request.TrackingData != null)
            {
                responseContent.TrackingData = new Dictionary <string, string>();
                CopyTrackingData(request.TrackingData, responseContent.TrackingData);
            }

            var retVal = new HttpResponseMessage(System.Net.HttpStatusCode.OK)
            {
                Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(responseContent))
            };

            return(Task.FromResult(retVal));
        }