public async Task MapsPagingProperties()
        {
            // given
            var subject = new MandatesClient(_clientConfiguration);

            var firstPageRequest = new GetMandatesRequest
            {
                Limit = 1
            };

            // when
            var firstPageResult = await subject.GetPageAsync(firstPageRequest);

            var secondPageRequest = new GetMandatesRequest
            {
                After = firstPageResult.Meta.Cursors.After,
                Limit = 2
            };

            var secondPageResult = await subject.GetPageAsync(secondPageRequest);

            // then
            Assert.That(firstPageResult.Items.Count(), Is.EqualTo(firstPageRequest.Limit));
            Assert.That(firstPageResult.Meta.Limit, Is.EqualTo(firstPageRequest.Limit));
            Assert.That(firstPageResult.Meta.Cursors.Before, Is.Null);
            Assert.That(firstPageResult.Meta.Cursors.After, Is.Not.Null);

            Assert.That(secondPageResult.Items.Count(), Is.EqualTo(secondPageRequest.Limit));
            Assert.That(secondPageResult.Meta.Limit, Is.EqualTo(secondPageRequest.Limit));
            Assert.That(secondPageResult.Meta.Cursors.Before, Is.Not.Null);
            Assert.That(secondPageResult.Meta.Cursors.After, Is.Not.Null);
        }
        public async Task CreatesSubscriptionForMerchant()
        {
            // given
            var accessToken    = Environment.GetEnvironmentVariable("GoCardlessMerchantAccessToken");
            var configuration  = ClientConfiguration.ForSandbox(accessToken);
            var mandatesClient = new MandatesClient(configuration);
            var mandate        = (await mandatesClient.GetPageAsync()).Items.First();

            var request = new CreateSubscriptionRequest
            {
                Amount       = 123,
                AppFee       = 12,
                Count        = 5,
                Currency     = "GBP",
                Interval     = 1,
                IntervalUnit = IntervalUnit.Weekly,
                Links        = new SubscriptionLinks
                {
                    Mandate = mandate.Id
                },
                Metadata = new Dictionary <string, string>
                {
                    ["Key1"] = "Value1",
                    ["Key2"] = "Value2",
                    ["Key3"] = "Value3",
                },
                Name      = "Test subscription",
                StartDate = DateTime.Now.AddMonths(1)
            };

            var subject = new SubscriptionsClient(configuration);

            // when
            var result = await subject.CreateAsync(request);

            // then
            Assert.That(result.Item.Id, Is.Not.Empty);
            Assert.That(result.Item.Amount, Is.EqualTo(request.Amount));
            Assert.That(result.Item.AppFee, Is.EqualTo(request.AppFee));
            Assert.That(result.Item.CreatedAt, Is.Not.Null.And.Not.EqualTo(default(DateTimeOffset)));
            Assert.That(result.Item.Currency, Is.EqualTo(request.Currency));
            Assert.That(result.Item.DayOfMonth, Is.EqualTo(request.DayOfMonth));
            Assert.That(result.Item.Interval, Is.EqualTo(request.Interval));
            Assert.That(result.Item.IntervalUnit, Is.EqualTo(request.IntervalUnit));
            Assert.That(result.Item.Links, Is.Not.Null);
            Assert.That(result.Item.Links.Mandate, Is.EqualTo(request.Links.Mandate));
            Assert.That(result.Item.Metadata, Is.EqualTo(request.Metadata));
            Assert.That(result.Item.Month, Is.EqualTo(request.Month));
            Assert.That(result.Item.Name, Is.EqualTo(request.Name));
            Assert.That(result.Item.PaymentReference, Is.EqualTo(request.PaymentReference));
            Assert.That(result.Item.StartDate.Date, Is.EqualTo(request.StartDate.Value.Date));
            Assert.That(result.Item.Status, Is.EqualTo(SubscriptionStatus.Active));
            Assert.That(result.Item.UpcomingPayments.Count(), Is.EqualTo(request.Count));
        }
Esempio n. 3
0
        public async Task CallsGetMandatesEndpoint()
        {
            // given
            var subject = new MandatesClient(_clientConfiguration);

            // when
            await subject.GetPageAsync();

            // then
            _httpTest
            .ShouldHaveCalled("https://api.gocardless.com/mandates")
            .WithVerb(HttpMethod.Get);
        }
Esempio n. 4
0
        public void GetMandatesRequestIsNullThrows()
        {
            // given
            var subject = new MandatesClient(_clientConfiguration);

            GetMandatesRequest request = null;

            // when
            AsyncTestDelegate test = () => subject.GetPageAsync(request);

            // then
            var ex = Assert.ThrowsAsync <ArgumentNullException>(test);

            Assert.That(ex.ParamName, Is.EqualTo(nameof(request)));
        }
Esempio n. 5
0
        public async Task CallsGetMandatesEndpointUsingRequest()
        {
            // given
            var subject = new MandatesClient(_clientConfiguration);

            var request = new GetMandatesRequest
            {
                Before = "before test",
                After  = "after test",
                Limit  = 5
            };

            // when
            await subject.GetPageAsync(request);

            // then
            _httpTest
            .ShouldHaveCalled("https://api.gocardless.com/mandates?before=before%20test&after=after%20test&limit=5")
            .WithVerb(HttpMethod.Get);
        }
        public async Task ReturnsMandates()
        {
            // given
            var subject = new MandatesClient(_clientConfiguration);

            // when
            var result = (await subject.GetPageAsync()).Items.ToList();

            // then
            Assert.That(result.Any(), Is.True);
            Assert.That(result[0], Is.Not.Null);
            Assert.That(result[0].Id, Is.Not.Null);
            Assert.That(result[0].CreatedAt, Is.Not.Null.And.Not.EqualTo(default(DateTimeOffset)));
            Assert.That(result[0].Links.Creditor, Is.Not.Null);
            Assert.That(result[0].Links.CustomerBankAccount, Is.Not.Null);
            Assert.That(result[0].Metadata, Is.Not.Null);
            Assert.That(result[0].NextPossibleChargeDate, Is.Not.EqualTo(default(DateTime)));
            Assert.That(result[0].Reference, Is.Not.Null);
            Assert.That(result[0].Scheme, Is.Not.Null);
            Assert.That(result[0].Status, Is.Not.Null);
        }
        public async Task UpdatesSubscriptionForMerchant()
        {
            // given
            var accessToken     = Environment.GetEnvironmentVariable("GoCardlessMerchantAccessToken");
            var configuration   = ClientConfiguration.ForSandbox(accessToken);
            var resourceFactory = new ResourceFactory(configuration);

            var mandatesClient = new MandatesClient(configuration);
            var mandate        = (await mandatesClient.GetPageAsync()).Items.First();
            var subscription   = await resourceFactory.CreateSubscriptionFor(mandate, paymentReference : null);

            var request = new UpdateSubscriptionRequest
            {
                Id       = subscription.Id,
                Amount   = 456,
                AppFee   = 34,
                Metadata = new Dictionary <string, string>
                {
                    ["Key4"] = "Value4",
                    ["Key5"] = "Value5",
                    ["Key6"] = "Value6",
                },
                Name = "Updated subscription name"
            };

            var subject = new SubscriptionsClient(configuration);

            // when
            var result = await subject.UpdateAsync(request);

            // then
            Assert.That(result.Item.Id, Is.EqualTo(request.Id));
            Assert.That(result.Item.Amount, Is.EqualTo(request.Amount));
            Assert.That(result.Item.AppFee, Is.EqualTo(request.AppFee));
            Assert.That(result.Item.Metadata, Is.EqualTo(request.Metadata));
            Assert.That(result.Item.Name, Is.EqualTo(request.Name));
        }
        public async Task PagesThroughMandates()
        {
            // given
            var subject = new MandatesClient(_clientConfiguration);
            var firstId = (await subject.GetPageAsync()).Items.First().Id;

            var initialRequest = new GetMandatesRequest
            {
                After = firstId,
                CreatedGreaterThan = new DateTimeOffset(DateTime.Now.AddDays(-1)),
                Limit = 1,
            };

            // when
            var result = await subject
                         .BuildPager()
                         .StartFrom(initialRequest)
                         .AndGetAllAfterAsync();

            // then
            Assert.That(result.Count, Is.GreaterThan(1));
            Assert.That(result[0].Id, Is.Not.Null.And.Not.EqualTo(result[1].Id));
            Assert.That(result[1].Id, Is.Not.Null.And.Not.EqualTo(result[0].Id));
        }
        public async Task CreatesAndCancelsPaymentForMerchant()
        {
            var accessToken     = Environment.GetEnvironmentVariable("GoCardlessMerchantAccessToken");
            var configuration   = ClientConfiguration.ForSandbox(accessToken);
            var resourceFactory = new ResourceFactory(configuration);

            var creditor = await resourceFactory.Creditor();

            var mandatesClient = new MandatesClient(configuration);
            var mandate        = (await mandatesClient.GetPageAsync()).Items.First();

            // given
            var createRequest = new CreatePaymentRequest
            {
                Amount      = 500,
                AppFee      = 12,
                ChargeDate  = DateTime.Now.AddMonths(1),
                Description = "Sandbox Payment",
                Currency    = "GBP",
                Links       = new CreatePaymentLinks {
                    Mandate = mandate.Id
                },
                Metadata = new Dictionary <string, string>
                {
                    ["Key1"] = "Value1",
                    ["Key2"] = "Value2",
                    ["Key3"] = "Value3",
                }
            };

            var subject = new PaymentsClient(configuration);

            // when
            var creationResult = await subject.CreateAsync(createRequest);

            var cancelRequest = new CancelPaymentRequest
            {
                Id       = creationResult.Item.Id,
                Metadata = new Dictionary <string, string>
                {
                    ["Key4"] = "Value4",
                    ["Key5"] = "Value5",
                    ["Key6"] = "Value6",
                },
            };

            var cancellationResult = await subject.CancelAsync(cancelRequest);

            // then
            Assert.That(creationResult.Item.Id, Is.Not.Null);
            Assert.That(creationResult.Item.Amount, Is.EqualTo(createRequest.Amount));
            Assert.That(creationResult.Item.AmountRefunded, Is.Not.Null);
            Assert.That(creationResult.Item.ChargeDate, Is.Not.Null.And.Not.EqualTo(default(DateTime)));
            Assert.That(creationResult.Item.CreatedAt, Is.Not.Null.And.Not.EqualTo(default(DateTimeOffset)));
            Assert.That(creationResult.Item.Currency, Is.EqualTo(createRequest.Currency));
            Assert.That(creationResult.Item.Description, Is.EqualTo(createRequest.Description));
            Assert.That(creationResult.Item.Links.Creditor, Is.EqualTo(creditor.Id));
            Assert.That(creationResult.Item.Links.Mandate, Is.EqualTo(mandate.Id));
            Assert.That(creationResult.Item.Metadata, Is.EqualTo(createRequest.Metadata));
            Assert.That(creationResult.Item.Reference, Is.EqualTo(createRequest.Reference));
            Assert.That(creationResult.Item.Status, Is.Not.Null.And.Not.EqualTo(PaymentStatus.Cancelled));

            Assert.That(cancellationResult.Item.Status, Is.EqualTo(PaymentStatus.Cancelled));
        }