コード例 #1
0
        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.GetQueryTransactionModel(filters);
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

            response.Should().NotBeNull();
            response.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            response.Model.TotalRecords.Should().Be(0);
        }
コード例 #2
0
        public void QueryTransactions_ShouldAllowFilteringWithValue(string value)
        {
            var filter = new Filter {
                Value = value, Field = Field.Email, Operator = Operator.Contains
            };
            var request = TestHelper.GetQueryTransactionModel(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));
            }
        }
コード例 #3
0
        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.GetQueryTransactionModel(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();
            }
        }
コード例 #4
0
        public void QueryTransactions_ShouldAllowFilteringBySearchString(string searchValue)
        {
            var request  = TestHelper.GetQueryTransactionModel(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);
        }
コード例 #5
0
        public void QueryTransactions_ShouldAllowColumnSortingBy(SortColumn?sortColumn)
        {
            var request  = TestHelper.GetQueryTransactionModel(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);
            }
        }
コード例 #6
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.GetQueryTransactionModel(new List <Filter> {
                filter
            });
            var response = CheckoutClient.ReportingService.QueryTransaction(request);

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

            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));
            }
        }
コード例 #7
0
        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.GetQueryTransactionModel(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
        }