public void QueryTransactions_ShouldAllowFilteringWithOperator(string value, Operator?op)
        {
            var filter = new Filter {
                Value = value, Field = Field.Email, Operator = op
            };
            var request = TestHelper.GetQueryRequest(new List <Filter> {
                filter
            });
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);

            if (op == Operator.Begins)
            {
                response.Model.Data.Should().OnlyContain(t => t.Customer.Email.StartsWith(value, _ignoreCase));
            }
            else if (op == Operator.Contains)
            {
                response.Model.Data.Should().OnlyContain(t => t.Customer.Email.Contains(value, _ignoreCase));
            }
            else if (op == Operator.Ends)
            {
                response.Model.Data.Should().OnlyContain(t => t.Customer.Email.EndsWith(value, _ignoreCase));
            }
            else
            {
                response.Model.Data.Should().OnlyContain(t => t.Customer.Email.Equals(value, _ignoreCase));
            }
        }
        public void QueryTransactions_ShouldAllowPagination(string pageNumber)
        {
            var request  = TestHelper.GetQueryRequest(string.Empty, null, null, null, null, null, pageNumber);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();

            if (string.IsNullOrEmpty(request.PageNumber))
            {
                // default page number
                response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
                response.Model.PageNumber.Should().Be(1);
            }
            else
            {
                int value;
                if (int.TryParse(request.PageNumber, out value) && value > 0)
                {
                    if (response.Model.PageNumber == 9999)
                    {
                        // Result set empty if greater than the number of pages.
                        response.Model.TotalRecords.Should().Be(0);
                    }

                    response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
                    response.Model.PageNumber.ShouldBeEquivalentTo(request.PageNumber);
                }
                else
                {
                    // invalid number
                    response.HttpStatusCode.Should().Be(HttpStatusCode.BadRequest);
                    response.HasError.Should().BeTrue();
                }
            }
        }
        public void QueryChargebacks()
        {
            var request  = TestHelper.GetQueryRequest("", DateTime.MinValue);
            var response = CheckoutClient.ReportingService.QueryChargeback(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            //response.Model.TotalRecords.Should().BeGreaterThan(1);
        }
        public void QueryTransactions_PageSizeShouldBeWithinLimits(int?pageSize, HttpStatusCode responseStatus,
                                                                   bool hasError)
        {
            var request  = TestHelper.GetQueryRequest(string.Empty, null, null, null, null, pageSize);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(responseStatus);
            response.HasError.Should().Be(hasError);
        }
Exemple #5
0
        public void QueryChargebacks()
        {
            DateTime fromDate = DateTime.Now.AddDays(-7); // Looking 7 days in the past
            var      request  = TestHelper.GetQueryRequest(fromDate: fromDate);
            var      response = CheckoutClient.ReportingService.QueryChargeback(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            //response.Model.TotalRecords.Should().BeGreaterThan(1);
        }
Exemple #6
0
        public void QueryTransactions_ToDateBeforeTransactionCreated_NoTransactionsFound()
        {
            var charge = CreateChargeWithNewTrackId();                             // create new charge
            var toDate = Convert.ToDateTime(charge.Created).AddMilliseconds(-1);   // ensure toDate is always before charge.Created

            var request  = TestHelper.GetQueryRequest(charge.Email, null, toDate); // query transactions starting from input date
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.TotalRecords.Should().Be(0);
        }
        public void QueryTransactions_ToDateIsNull_OneTransactionFound()
        {
            // create new charge
            var charge = CreateChargeWithNewTrackId();

            // query transactions starting from input date
            var request  = TestHelper.GetQueryRequest(charge.Email);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.TotalRecords.Should().Be(1);
        }
        public void QueryTransactions_FromDateAfterTransactionCreated_NoTransactionsFound()
        {
            // create new charge
            var charge = CreateChargeWithNewTrackId();

            // query transactions starting from charge created date
            var chargeCreatedDate = DateTime.SpecifyKind(DateTime.Parse(charge.Created), DateTimeKind.Utc);
            var request           = TestHelper.GetQueryRequest(charge.Email, chargeCreatedDate.AddHours(1));
            var response          = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.TotalRecords.Should().Be(0);
        }
Exemple #9
0
        public void QueryTransactions_ShouldAllowFilteringBySearchWithCardNumber()
        {
            var charge = CreateChargeWithNewTrackId(out string cardNumber);

            // query transactions containing the generated card number
            var request = TestHelper.GetQueryRequest(TestHelper.MaskCardNumber(cardNumber), null, null,
                                                     SortColumn.Date);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.TotalRecords.Should().BeGreaterThan(0);
            response.Model.Data.Should().Contain(t => t.TrackId == charge.TrackId);
        }
        public void QueryTransactions_FromDateBeforeTransactionCreated_OneTransactionFound()
        {
            // create new charge
            var fromDate       = DateTime.Now;
            var chargeResponse = CreateChargeWithNewTrackId();

            // query transactions starting from input date
            var request  = TestHelper.GetQueryRequest(chargeResponse.Email, fromDate);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.Data.Should().OnlyContain(d => fromDate < d.Date);
            response.Model.TotalRecords.Should().Be(1);
        }
        public void QueryTransactions_ShouldAllowSortingOrder(SortOrder?sortOrder)
        {
            var request  = TestHelper.GetQueryRequest(string.Empty, null, null, SortColumn.Date, sortOrder);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);

            if (request.SortOrder == SortOrder.Asc)
            {
                response.Model.Data.Should().BeInAscendingOrder(x => x.Date);
            }
            else
            {
                response.Model.Data.Should().BeInDescendingOrder(x => x.Date);
            }
        }
        public void QueryTransactions_MultipleFilters()
        {
            var filters = new List <Filter>
            {
                new Filter {
                    Value = "test", Field = Field.Email, Operator = Operator.Contains
                },
                new Filter {
                    Value = "captured", Field = Field.Status, Operator = Operator.Equals
                }
            };

            var request  = TestHelper.GetQueryRequest(filters);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.TotalRecords.Should().BeGreaterThan(0);
            response.Model.Data.Should().OnlyContain(t => t.Customer.Email.Contains("test"));
            response.Model.Data.Should().OnlyContain(t => t.Status == "Captured");
        }
        public void QueryTransactions_OppositeFilters_NoResults()
        {
            var filters = new List <Filter>
            {
                new Filter {
                    Value = "test", Field = Field.Email, Operator = Operator.Contains
                },
                new Filter
                {
                    Action   = FilterAction.Exclude,
                    Value    = "test",
                    Field    = Field.Email,
                    Operator = Operator.Contains
                }
            };
            var request  = TestHelper.GetQueryRequest(filters);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.TotalRecords.Should().Be(0);
        }
        public void QueryTransactions_ShouldAllowFilteringWithValue(string value)
        {
            var filter = new Filter {
                Value = value, Field = Field.Email, Operator = Operator.Contains
            };
            var request = TestHelper.GetQueryRequest(new List <Filter> {
                filter
            });
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            if (string.IsNullOrEmpty(value))
            {
                response.HttpStatusCode.Should().Be(HttpStatusCode.BadRequest);
                response.HasError.Should().BeTrue();
            }
            else
            {
                response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
                response.Model.Data.Should().OnlyContain(t => t.Customer.Email.Contains(value));
            }
        }
        public void QueryTransactions_ShouldAllowFilteringByField(Field?field)
        {
            string cardNumber;
            var    charge = CreateChargeWithNewTrackId(out cardNumber);
            var    filter = new Filter {
                Field = field, Value = GetChargePropertyValueFromField(charge, field, cardNumber)
            };

            var request = TestHelper.GetQueryRequest(new List <Filter> {
                filter
            });
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();

            if (field.HasValue)
            {
                response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
                response.Model.TotalRecords.Should().BeGreaterThan(0);

                if (field == Field.Status)
                {
                    response.Model.Data.Should().OnlyContain(t => t.Status.Equals(filter.Value, _ignoreCase));
                }
                else if (field == Field.Email)
                {
                    response.Model.Data.Should().OnlyContain(t => t.Customer.Email.Equals(filter.Value, _ignoreCase));
                }
                else
                {
                    response.Model.Data.Should().Contain(t => t.TrackId == charge.TrackId);
                }
            }
            else
            {
                response.HttpStatusCode.Should().Be(HttpStatusCode.BadRequest);
                response.HasError.Should().BeTrue();
            }
        }
        public void QueryTransactions_ShouldAllowFilteringBySearchString(string searchValue)
        {
            var request  = TestHelper.GetQueryRequest(searchValue);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.TotalRecords.Should().BeGreaterThan(0);

            // the following fields will be checked if they contain the input search value:
            var assertions = new List <bool>
            {
                response.Model.Data.Any(d => d.Id.Contains(request.Search, _ignoreCase)),
                response.Model.Data.Any(d => d.OriginId.Contains(request.Search, _ignoreCase)),
                response.Model.Data.Any(d => d.TrackId.Contains(request.Search, _ignoreCase)),
                response.Model.Data.Any(d => d.Status.Contains(request.Search, _ignoreCase)),
                response.Model.Data.Any(d => d.Customer.Email.Contains(request.Search, _ignoreCase))
            };

            // at least one of the fields contains the search value
            assertions.Should().Contain(assert => assert);
        }
Exemple #17
0
        public void QueryTransactions_ShouldAllowFilteringWithAction(FilterAction?action, string value)
        {
            var filter = new Filter {
                Action = action, Value = value, Field = Field.Email, Operator = Operator.Contains
            };
            var request = TestHelper.GetQueryRequest(new List <Filter> {
                filter
            });
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);

            if (action == FilterAction.Exclude)
            {
                response.Model.Data.Should().NotContain(t => t.Customer.Email.Contains(value));
            }
            else
            {
                response.Model.Data.Should().OnlyContain(t => t.Customer.Email.Contains(value));
            }
        }
        public void QueryTransactions_ShouldAllowColumnSortingBy(SortColumn?sortColumn)
        {
            var request  = TestHelper.GetQueryRequest(string.Empty, null, null, sortColumn);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);

            if (!sortColumn.HasValue || sortColumn == SortColumn.Date)
            {
                response.Model.Data.Should().BeInDescendingOrder(x => x.Date);
            }
            else if (sortColumn == SortColumn.Name || sortColumn == SortColumn.Email)
            {
                var expression = ReflectionHelper.CreateExpression <Transaction>("Customer." + sortColumn);
                response.Model.Data.Should().BeInAscendingOrder(expression);
            }
            else
            {
                var expression = ReflectionHelper.CreateExpression <Transaction>(sortColumn);
                response.Model.Data.Should().BeInAscendingOrder(expression);
            }
        }
        public void QueryTransactions_CreateChargeAndCapture_BothTransactionsFoundBy(Field?field)
        {
            string cardNumber;
            var    charge = CreateChargeWithNewTrackId(out cardNumber);
            var    filter = new Filter {
                Field = field, Value = GetChargePropertyValueFromField(charge, field, cardNumber)
            };

            var request = TestHelper.GetQueryRequest(new List <Filter> {
                filter
            });
            var firstQueryResponse = CheckoutClient.ReportingService.QueryTransaction(request);

            #region Assert First Query Response

            firstQueryResponse.Should().NotBeNull();

            if (field.HasValue)
            {
                firstQueryResponse.HttpStatusCode.Should().Be(HttpStatusCode.OK);
                firstQueryResponse.Model.TotalRecords.Should().BeGreaterThan(0);

                if (field == Field.Status)
                {
                    firstQueryResponse.Model.Data.Should().OnlyContain(t => t.Status.Equals(filter.Value, _ignoreCase));
                }
                else if (field == Field.Email)
                {
                    firstQueryResponse.Model.Data.Should()
                    .OnlyContain(t => t.Customer.Email.Equals(filter.Value, _ignoreCase));
                }
                else
                {
                    firstQueryResponse.Model.Data.Should().OnlyContain(t => t.TrackId.Equals(charge.TrackId));
                }
            }
            else
            {
                firstQueryResponse.HttpStatusCode.Should().Be(HttpStatusCode.BadRequest);
                firstQueryResponse.HasError.Should().BeTrue();
            }

            #endregion Assert First Query Response

            // capture charge and query 2nd time
            var chargeCapture = TestHelper.GetChargeCaptureModel(charge.Value);
            chargeCapture.TrackId = charge.TrackId;
            var captureChargeResponse = CheckoutClient.ChargeService.CaptureCharge(charge.Id, chargeCapture);

            captureChargeResponse.Should().NotBeNull();
            captureChargeResponse.HttpStatusCode.Should().Be(HttpStatusCode.OK);

            var secondQueryResponse = CheckoutClient.ReportingService.QueryTransaction(request);

            #region Assert Second Query Response

            secondQueryResponse.Should().NotBeNull();

            if (field.HasValue)
            {
                secondQueryResponse.HttpStatusCode.Should().Be(HttpStatusCode.OK);
                secondQueryResponse.Model.TotalRecords.Should().BeGreaterThan(0);

                if (field == Field.Status)
                {
                    secondQueryResponse.Model.Data.Should().OnlyContain(t => t.Status.Equals(filter.Value, _ignoreCase));
                }
                else if (field == Field.Email)
                {
                    secondQueryResponse.Model.Data.Should()
                    .OnlyContain(t => t.Customer.Email.Equals(filter.Value, _ignoreCase));
                }
                else if (field == Field.CardNumber || field == Field.ChargeId)
                {
                    secondQueryResponse.Model.Data.Should()
                    .OnlyContain(t => t.TrackId == charge.TrackId)
                    .And.HaveCount(1);
                }
                else if (field == Field.TrackId)
                {
                    secondQueryResponse.Model.Data.Should()
                    .OnlyContain(t => t.TrackId == charge.TrackId)
                    .And.HaveCount(2);
                }
            }
            else
            {
                secondQueryResponse.HttpStatusCode.Should().Be(HttpStatusCode.BadRequest);
                secondQueryResponse.HasError.Should().BeTrue();
            }

            #endregion Assert Second Query Response
        }