Пример #1
0
        public void CallbackParseSuccess()
        {
            // Arrange
            var client   = Mocks.GetMockedMGClient(null);
            var callback = "{\"type\":\"SALE\",\"status\":\"APPROVED\",\"errorMessage\":\"\",\"endpointID\":\"400009\",\"processorTransactionID\":\"279198e3-7277-4e28-a490-e02deec1a3cc\",\"orderID\":\"32453550\",\"merchantOrderID\":\"QvE8dZshpKhaOmHY1\",\"amount\":\"100.00\",\"currency\":\"USD\",\"customerEmail\":\"[email protected]\",\"customParam\":\"\",\"extraData\":{\"dcc\":false,\"paymentMethod\":\"ONLINE\"},\"originalRequest\":{\"merchantOrderID\":\"QvE8dZshpKhaOmHY1\",\"merchantOrderDesc\":\"desc\",\"orderAmount\":\"100.00\",\"orderCurrency\":\"USD\",\"customerEmail\":\"[email protected]\",\"customerFirstName\":\"John\",\"customerLastName\":\"Doe\",\"customerAddress\":\"The Moon, hill 42\",\"customerCountryCode\":\"BG\",\"customerCity\":\"Sofia\",\"customerZipCode\":\"1303\",\"customerPhone\":\"123\",\"customerIP\":\"127.0.0.1\",\"redirectUrl\":\"https://example-merchant.com/payment/return\",\"callbackUrl\":\"https://ens39ypv7jld8.x.pipedream.net\",\"checkoutUrl\":\"https://example-merchant.com/deposit\",\"signature\":\"0ca81b0354fd669b602b683ca11859635a1831d438ef276289ab653a310c8f76\",\"requestedAt\":\"0001-01-01T00:00:00Z\"},\"signature\":\"7df9a67035e2c2f145c51653bd25aa56658954dac1a4ce8f77ddc4f991ecab1a\"}";

            // Act
            var actual = client.Parse(callback);

            // Assert
            Assert.IsTrue(actual.IsVerified);
            Assert.IsEmpty(actual.ErrorMessage);
            Assert.AreEqual("APPROVED", actual.Status);
        }
Пример #2
0
        public async Task CardDepositShouldShowFullErrorMessage()
        {
            // Arrange
            MGDepositCardRequest DepositOrderRequest = Mocks.GetFullDepositCardRequest();
            MGClient             clientWithConfig    = Mocks.GetMockedMGClient(null);
            string expectedErrorMessage = "The CardExpirationYear field is required. | The CardCvv field is required. | The CardExpirationMonth field is required. | The CardHolderName field is required. | The CardNumber field is required.";

            // Act
            var actualResult = await clientWithConfig.InitCardDeposit(DepositOrderRequest);

            // Assert
            Assert.IsFalse(actualResult.IsSuccess);
            Assert.AreEqual(expectedErrorMessage, actualResult.Message);
        }
Пример #3
0
        public void CallbackParseCatchInvalidInput()
        {
            // Arrange
            var client               = Mocks.GetMockedMGClient(null);
            var callback             = "invalid json message";
            var expectedErrorMessage = "Unexpected character encountered while parsing value: i. Path '', line 0, position 0.";

            // Act
            var actual = client.Parse(callback);

            // Assert
            Assert.IsFalse(actual.IsVerified);
            Assert.AreEqual(expectedErrorMessage, actual.ErrorMessage);
        }
Пример #4
0
        public void PayoutOrderSuccess()
        {
            // Arrange
            MGPayoutResult expectedResult = new MGPayoutResult()
            {
                IsSuccess = true,
                Code      = "200",
                Message   = null,
                Data      = new MGPayoutData {
                    orderID = "123456", merchantOrderID = "merch-order"
                }
            };
            string   messageSuccess = "{ \"code\": \"200\", \"data\": { \"orderID\": \"123456\", \"merchantOrderID\": \"merch-order\"} }";
            var      httpMock       = Mocks.GetMockedHttp(HttpStatusCode.OK, messageSuccess);
            MGClient client         = Mocks.GetMockedMGClient(httpClient: httpMock);
            var      payoutRequest  = new MGPayoutRequest
            {
                MerchantOrderID           = "Q44mHY18",
                CustomerBankCode          = "BBL",
                OrderAmount               = "100.00",
                CustomerBankAccountNumber = "1234567",
                CustomerBankAccountName   = "Don Jhoe",
                CustomerEmail             = "*****@*****.**",
                CustomerBankBranch        = "bankBranch",
                CustomerBankProvince      = "province",
                CustomerBankArea          = "bankArea",
                CustomerBankRoutingNumber = "000",
                OrderCurrency             = "USD",
                MerchantOrderDesc         = "desc",
                CustomerFirstName         = "John",
                CustomerLastName          = "Doe",
                CustomerBankAddress       = "The Moon, hill 42",
                CustomerBankZipCode       = "1303",
                CustomerPhone             = "123",
                CustomerIP  = "127.0.0.1",
                RedirectUrl = "https://example-merchant.com/payment/return",
                CheckoutUrl = "https://example-merchant.com/deposit",
                CallbackUrl = "https://example-merchant.com/callback",
            };

            // Act
            MGPayoutResult actual = client.InitPayout(payoutRequest).Result;

            // Assert
            Assert.IsTrue(actual.IsSuccess);
            Assert.AreEqual(expectedResult.Code, actual.Code);
            Assert.AreEqual(expectedResult.Message, actual.Message);
            Assert.AreEqual(expectedResult.Data.orderID, actual.Data.orderID);
            Assert.AreEqual(expectedResult.Data.merchantOrderID, actual.Data.merchantOrderID);
        }
Пример #5
0
        public void QueryRequestShouldHandleError()
        {
            // Arrange
            var queryRequest    = new MGQueryTxnRequest {
            };
            var client          = Mocks.GetMockedMGClient(null);
            var expectedMessage = "The OrderID field is required. | The MerchantOrderID field is required.";

            // Act
            MGQueryTxnResult actual = client.CheckOrderStatus(queryRequest).Result;

            // Assert
            Assert.IsFalse(actual.IsSuccess);
            Assert.AreEqual(expectedMessage, actual.Message);
        }
Пример #6
0
        public void DepositSuccess()
        {
            // Arrange
            MGDepositResult expectedResult = new MGDepositResult()
            {
                IsSuccess = true,
                Code      = "200",
                Message   = null,
                Data      = new DepositResponseData()
                {
                    DepositUrl      = "https://api.zotapay.com/api/v1/deposit/init/8b3a6b89697e8ac8f45d964bcc90c7ba41764acd/",
                    MerchantOrderID = "QvE8dZshpKhaOmHY",
                    OrderID         = "8b3a6b89697e8ac8f45d964bcc90c7ba41764acd",
                }
            };
            string   messageSuccess = "{ \"code\": \"200\", \"data\": { \"depositUrl\": \"https://api.zotapay.com/api/v1/deposit/init/8b3a6b89697e8ac8f45d964bcc90c7ba41764acd/\", \"merchantOrderID\": \"QvE8dZshpKhaOmHY\", \"orderID\": \"8b3a6b89697e8ac8f45d964bcc90c7ba41764acd\" } }";
            var      httpMock       = Mocks.GetMockedHttp(HttpStatusCode.OK, messageSuccess);
            MGClient client         = Mocks.GetMockedMGClient(httpClient: httpMock);
            var      DepositRequest = new MGDepositRequest
            {
                MerchantOrderID     = "QvE8dZshpKhaOmHY",
                OrderAmount         = "100.00",
                CustomerEmail       = "*****@*****.**",
                OrderCurrency       = "USD",
                MerchantOrderDesc   = "desc",
                CustomerFirstName   = "John",
                CustomerLastName    = "Doe",
                CustomerAddress     = "The Moon, hill 42",
                CustomerCity        = "Sofia",
                CustomerCountryCode = "BG",
                CustomerZipCode     = "1303",
                CustomerPhone       = "123",
                CustomerIP          = "127.0.0.1",
                RedirectUrl         = "https://example-merchant.com/payment/return",
                CheckoutUrl         = "https://example-merchant.com/deposit"
            };

            // Act
            MGDepositResult actual = client.InitDeposit(DepositRequest).Result;

            // Assert
            Assert.IsTrue(actual.IsSuccess);
            Assert.AreEqual(expectedResult.Data.DepositUrl, actual.Data.DepositUrl);
            Assert.AreEqual(expectedResult.Data.MerchantOrderID, actual.Data.MerchantOrderID);
            Assert.AreEqual(expectedResult.Data.OrderID, actual.Data.OrderID);
            Assert.AreEqual(expectedResult.Code, actual.Code);
            Assert.AreEqual(expectedResult.Message, actual.Message);
        }
Пример #7
0
        public void DepositCatchesUnexpectedResponse()
        {
            // Arrange
            string   responseMessage      = "!@#$%^&*() -- not a valid json message, that will cause an exception -- !@#$%^&*()";
            var      httpMock             = Mocks.GetMockedHttp(HttpStatusCode.InternalServerError, responseMessage);
            MGClient client               = Mocks.GetMockedMGClient(httpClient: httpMock);
            var      DepositRequest       = Mocks.GetFullDepositRequest();
            string   expectedErrorMessage = "Unexpected character encountered while parsing value: !. Path '', line 0, position 0.: \n" +
                                            "Raw Response: !@#$%^&*() -- not a valid json message, that will cause an exception -- !@#$%^&*()";

            // Act
            MGDepositResult actual = client.InitDeposit(DepositRequest).Result;

            // Assert
            Assert.IsFalse(actual.IsSuccess);
            Assert.AreEqual(expectedErrorMessage, actual.Message);
        }
Пример #8
0
        public void EmptyRequestShowsFullErrorMessage()
        {
            // Arrange
            MGClient         clientMock           = Mocks.GetMockedMGClient(null);
            MGDepositRequest depositRequest       = new MGDepositRequest();
            string           expectedErrorMessage = "The MerchantOrderID field is required. | The MerchantOrderDesc field is required. |" +
                                                    " The OrderAmount field is required. | The OrderCurrency field is required. | The CustomerFirstName field is required. |" +
                                                    " The CustomerLastName field is required. | The CustomerAddress field is required. | The CustomerCountryCode field is required. |" +
                                                    " The CustomerCity field is required. | The CustomerZipCode field is required. | The CustomerPhone field is required. |" +
                                                    " The CustomerIP field is required. | The RedirectUrl field is required. | The CheckoutUrl field is required.";

            // Act
            MGDepositResult actualDepositResult = clientMock.InitDeposit(depositRequest).Result;

            // Assert
            Assert.IsFalse(actualDepositResult.IsSuccess);
            Assert.AreEqual(expectedErrorMessage, actualDepositResult.Message);
        }
Пример #9
0
        public void QueryRequestSuccess()
        {
            // Arrange
            var queryRequest = new MGQueryTxnRequest
            {
                OrderID         = "1234567",
                MerchantOrderID = "merch-order-id",
            };
            string messageSuccess = "{\"code\":\"200\",\"data\":{\"type\":\"SALE\",\"status\":\"APPROVED\",\"errorMessage\":\"\",\"endpointID\":\"1050\",\"processorTransactionID\":\"\",\"orderID\":\"8b3a6b89697e8ac8f45d964bcc90c7ba41764acd\",\"merchantOrderID\":\"QvE8dZshpKhaOmHY\",\"amount\":\"500.00\",\"currency\":\"THB\",\"customerEmail\":\"[email protected]\",\"customParam\":\"{\\\"UserId\\\":\\\"e139b447\\\"}\",\"extraData\":\"\",\"request\":{\"merchantID\":\"EXAMPLE-MERCHANT-ID\",\"orderID\":\"8b3a6b89697e8ac8f45d964bcc90c7ba41764acd\",\"merchantOrderID\":\"QvE8dZshpKhaOmHY\",\"timestamp\":\"1564617600\"}}}";
            var    httpMock       = Mocks.GetMockedHttp(HttpStatusCode.OK, messageSuccess);
            var    client         = Mocks.GetMockedMGClient(httpClient: httpMock);

            // Act
            var actual = client.CheckOrderStatus(queryRequest).Result;

            // Assert
            Assert.IsTrue(actual.IsSuccess);
            Assert.AreEqual("APPROVED", actual.Data.status);
        }
Пример #10
0
        public void DepositUnsuccessful()
        {
            // Arrange
            MGDepositResult expectedResult = new MGDepositResult()
            {
                IsSuccess = false,
                Code      = "400",
                Message   = "endpoint currency mismatch",
                Data      = null,
            };
            string   responseMessage = "{ \"code\": \"400\", \"message\": \"endpoint currency mismatch\" } ";
            var      httpMock        = Mocks.GetMockedHttp(HttpStatusCode.BadRequest, responseMessage);
            MGClient client          = Mocks.GetMockedMGClient(httpClient: httpMock);
            var      DepositRequest  = Mocks.GetFullDepositRequest();

            // Act
            MGDepositResult actual = client.InitDeposit(DepositRequest).Result;

            // Assert
            Assert.IsFalse(actual.IsSuccess);
            Assert.AreEqual(expectedResult.Data, actual.Data);
            Assert.AreEqual(expectedResult.Code, actual.Code);
            Assert.AreEqual(expectedResult.Message, actual.Message);
        }