public void BaseUriIsSandboxUriWhenUsingSandboxConfiguration()
        {
            // given
            var subject = ClientConfiguration.ForSandbox(_accessToken);

            // when
            var result = subject.BaseUri;

            // then
            Assert.That(result, Is.EqualTo("https://api-sandbox.gocardless.com/"));
        }
        public void AccessTokenIsNotSuppliedForSandboxConfigurationThrows(string accessToken)
        {
            // given
            // when
            TestDelegate test = () => ClientConfiguration.ForSandbox(accessToken);

            // then
            var ex = Assert.Throws <ArgumentException>(test);

            Assert.That(ex.ParamName, Is.EqualTo(nameof(accessToken)));
        }
        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));
        }
        public void ApiUsageIsInvalidInvalidThrows()
        {
            // given
            var request = new CreateSubscriptionRequest
            {
                Amount       = 123,
                Currency     = "GBP",
                IntervalUnit = IntervalUnit.Weekly,
                Count        = 5,
                Interval     = 1,
                Metadata     = new Dictionary <string, string>
                {
                    ["Key1"] = "Value1",
                    ["Key2"] = "Value2",
                    ["Key3"] = "Value3",
                },
                Name      = "Test subscription",
                StartDate = DateTime.Now.AddMonths(1),
                Links     = new SubscriptionLinks
                {
                    Mandate = _mandate.Id
                }
            };

            var subject = new SubscriptionsClient(ClientConfiguration.ForSandbox("invalid token"));

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

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

            Assert.That(ex.Code, Is.EqualTo((int)HttpStatusCode.Unauthorized));
            Assert.That(ex.DocumentationUrl, Is.Not.Null);
            Assert.That(ex.Errors?.Any(), Is.True);
            Assert.That(ex.Message, Is.Not.Null.And.Not.Empty);
            Assert.That(ex.RawResponse, Is.Not.Null.And.Not.Empty);
            Assert.That(ex.RequestId, Is.Not.Null.And.Not.Empty);
        }
        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));
        }
Exemplo n.º 6
0
 internal IntegrationTest()
 {
     _accessToken         = System.Environment.GetEnvironmentVariable("GoCardlessAccessToken");
     _clientConfiguration = ClientConfiguration.ForSandbox(_accessToken);
     _resourceFactory     = new ResourceFactory(_clientConfiguration);
 }
        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));
        }