Skip to content

Commit

Permalink
Merge pull request #35 from john-hartley/new-zealand-support
Browse files Browse the repository at this point in the history
Added support for direct debits in New Zealand and completed support for mandate PDF creation
  • Loading branch information
john-hartley authored Oct 18, 2018
2 parents 97a666b + b8db9c3 commit eb72380
Show file tree
Hide file tree
Showing 14 changed files with 170 additions and 50 deletions.
2 changes: 1 addition & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: 1.0.3.{build}
version: 1.1.0.{build}
image: Visual Studio 2017
configuration: Release
skip_tags: true
Expand Down
1 change: 1 addition & 0 deletions src/GoCardless.Api/Customers/CreateCustomerRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public CreateCustomerRequest()

public string Language { get; set; }
public IDictionary<string, string> Metadata { get; set; }
public string PhoneNumber { get; set; }
public string PostalCode { get; set; }
public string Region { get; set; }
public string SwedishIdentityNumber { get; set; }
Expand Down
1 change: 1 addition & 0 deletions src/GoCardless.Api/Customers/Customer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class Customer
public string GivenName { get; set; }
public string Language { get; set; }
public IDictionary<string, string> Metadata { get; set; }
public string PhoneNumber { get; set; }
public string PostalCode { get; set; }
public string Region { get; set; }
public string SwedishIdentityNumber { get; set; }
Expand Down
1 change: 1 addition & 0 deletions src/GoCardless.Api/Customers/UpdateCustomerRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class UpdateCustomerRequest
public string GivenName { get; set; }
public string Language { get; set; }
public IDictionary<string, string> Metadata { get; set; }
public string PhoneNumber { get; set; }
public string PostalCode { get; set; }
public string Region { get; set; }
}
Expand Down
1 change: 1 addition & 0 deletions src/GoCardless.Api/MandateImportEntries/Customer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public class Customer
public string FamilyName { get; set; }
public string GivenName { get; set; }
public string Language { get; set; }
public string PhoneNumber { get; set; }
public string PostalCode { get; set; }
public string Region { get; set; }
public string SwedishIdentityNumber { get; set; }
Expand Down
34 changes: 33 additions & 1 deletion src/GoCardless.Api/MandatePdfs/CreateMandatePdfRequest.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,44 @@
using Newtonsoft.Json;
using GoCardless.Api.Core.Serialisation;
using Newtonsoft.Json;
using System;

namespace GoCardless.Api.MandatePdfs
{
public class CreateMandatePdfRequest
{
public string AccountHolderName { get; set; }
public string AccountNumber { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string AddressLine3 { get; set; }
public string BankCode { get; set; }
public string Bic { get; set; }
public string City { get; set; }
public string CountryCode { get; set; }
public string DanishIdentityNumber { get; set; }
public string Iban { get; set; }

[JsonIgnore]
public string Language { get; set; }

public MandatePdfLinks Links { get; set; }
public string MandateReference { get; set; }
public string PhoneNumber { get; set; }
public string PostalCode { get; set; }
public string Region { get; set; }

/// <summary>
/// See <see cref="Models.Scheme"/> for possible values.
/// </summary>
public string Scheme { get; set; }

/// <summary>
/// A calendar date in the ISO-8061 format of yyyy-MM-dd. If a time component is supplied,
/// it will be discarded (e.g. 2018-09-18T15:05:06.123Z will become 2018-09-18).
/// </summary>
[JsonConverter(typeof(IsoDateJsonConverter), DateFormat.IsoDateFormat)]
public DateTime? SignatureDate { get; set; }

public string SwedishIdentityNumber { get; set; }
}
}
1 change: 1 addition & 0 deletions src/GoCardless.Api/Models/Scheme.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ public static class Scheme
public static readonly string Autogiro = "autogiro";
public static readonly string Bacs = "bacs";
public static readonly string Becs = "becs";
public static readonly string BecsNz = "becs_nz";
public static readonly string Betalingsservice = "betalingsservice";
public static readonly string SepaCore = "sepa_core";
public static readonly string SepaCor1 = "sepa_cor1";
Expand Down
1 change: 1 addition & 0 deletions src/GoCardless.Api/RedirectFlows/PrefilledCustomer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public class PrefilledCustomer
public string FamilyName { get; set; }
public string GivenName { get; set; }
public string Language { get; set; }
public string PhoneNumber { get; set; }
public string PostalCode { get; set; }
public string Region { get; set; }
public string SwedishIdentityNumber { get; set; }
Expand Down
118 changes: 78 additions & 40 deletions tests/GoCardless.Api.Tests.Integration/CustomersClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,22 @@ public async Task CreatesCustomer()
AddressLine3 = "Address Line 3",
City = "London",
CompanyName = "Company Name",
CountryCode = "DK",
CountryCode = "NZ",
DanishIdentityNumber = "2205506218",
Email = "email@example.com",
FamilyName = "Family Name",
GivenName = "Given Name",
Language = "da",
PostalCode = "SW1A 1AA",
Region = "Essex",
DanishIdentityNumber = "2205506218",
SwedishIdentityNumber = "5302256218",
Language = "en",
Metadata = new Dictionary<string, string>
{
["Key1"] = "Value1",
["Key2"] = "Value2",
["Key3"] = "Value3",
},
PhoneNumber = "+44 20 7183 8674",
PostalCode = "SW1A 1AA",
Region = "Essex",
SwedishIdentityNumber = "5302256218",
};

var subject = new CustomersClient(_clientConfiguration);
Expand All @@ -47,21 +48,22 @@ public async Task CreatesCustomer()
// then
Assert.That(actual, Is.Not.Null);
Assert.That(actual.Id, Is.Not.Null);
Assert.That(actual.CreatedAt, Is.Not.EqualTo(default(DateTimeOffset)));
Assert.That(actual.Email, Is.EqualTo(request.Email));
Assert.That(actual.GivenName, Is.EqualTo(request.GivenName));
Assert.That(actual.FamilyName, Is.EqualTo(request.FamilyName));
Assert.That(actual.AddressLine1, Is.EqualTo(request.AddressLine1));
Assert.That(actual.AddressLine2, Is.EqualTo(request.AddressLine2));
Assert.That(actual.AddressLine3, Is.EqualTo(request.AddressLine3));
Assert.That(actual.City, Is.EqualTo(request.City));
Assert.That(actual.Region, Is.EqualTo(request.Region));
Assert.That(actual.PostalCode, Is.EqualTo(request.PostalCode));
Assert.That(actual.CountryCode, Is.EqualTo(request.CountryCode));
Assert.That(actual.Language, Is.EqualTo(request.Language));
Assert.That(actual.CreatedAt, Is.Not.EqualTo(default(DateTimeOffset)));
Assert.That(actual.DanishIdentityNumber, Is.EqualTo(request.DanishIdentityNumber));
Assert.That(actual.SwedishIdentityNumber, Does.Contain(request.SwedishIdentityNumber));
Assert.That(actual.Email, Is.EqualTo(request.Email));
Assert.That(actual.FamilyName, Is.EqualTo(request.FamilyName));
Assert.That(actual.GivenName, Is.EqualTo(request.GivenName));
Assert.That(actual.Language, Is.EqualTo(request.Language));
Assert.That(actual.Metadata, Is.EqualTo(request.Metadata));
Assert.That(actual.PhoneNumber, Is.EqualTo(request.PhoneNumber));
Assert.That(actual.PostalCode, Is.EqualTo(request.PostalCode));
Assert.That(actual.Region, Is.EqualTo(request.Region));
Assert.That(actual.SwedishIdentityNumber, Does.Contain(request.SwedishIdentityNumber));
}

[Test]
Expand All @@ -77,21 +79,22 @@ public async Task ReturnsCustomers()
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.EqualTo(default(DateTimeOffset)));
Assert.That(result[0].Email, Is.Not.Null);
Assert.That(result[0].GivenName, Is.Not.Null);
Assert.That(result[0].FamilyName, Is.Not.Null);
Assert.That(result[0].AddressLine1, Is.Not.Null);
Assert.That(result[0].AddressLine2, Is.Not.Null);
Assert.That(result[0].AddressLine3, Is.Not.Null);
Assert.That(result[0].City, Is.Not.Null);
Assert.That(result[0].Region, Is.Not.Null);
Assert.That(result[0].PostalCode, Is.Not.Null);
Assert.That(result[0].CountryCode, Is.Not.Null);
Assert.That(result[0].Language, Is.Not.Null);
Assert.That(result[0].CreatedAt, Is.Not.EqualTo(default(DateTimeOffset)));
Assert.That(result[0].DanishIdentityNumber, Is.Not.Null);
Assert.That(result[0].SwedishIdentityNumber, Is.Not.Null);
Assert.That(result[0].Email, Is.Not.Null);
Assert.That(result[0].FamilyName, Is.Not.Null);
Assert.That(result[0].GivenName, Is.Not.Null);
Assert.That(result[0].Language, Is.Not.Null);
Assert.That(result[0].Metadata, Is.Not.Null);
Assert.That(result[0].PhoneNumber, Is.Not.Null);
Assert.That(result[0].PostalCode, Is.Not.Null);
Assert.That(result[0].Region, Is.Not.Null);
Assert.That(result[0].SwedishIdentityNumber, Is.Not.Null);
}

[Test]
Expand Down Expand Up @@ -142,21 +145,52 @@ public async Task ReturnsIndividualCustomer()
// then
Assert.That(actual, Is.Not.Null);
Assert.That(actual.Id, Is.Not.Null);
Assert.That(actual.AddressLine1, Is.Not.Null.And.EqualTo(customer.AddressLine1));
Assert.That(actual.AddressLine2, Is.Not.Null.And.EqualTo(customer.AddressLine2));
Assert.That(actual.AddressLine3, Is.Not.Null.And.EqualTo(customer.AddressLine3));
Assert.That(actual.City, Is.Not.Null.And.EqualTo(customer.City));
Assert.That(actual.CountryCode, Is.Not.Null.And.EqualTo(customer.CountryCode));
Assert.That(actual.CreatedAt, Is.Not.EqualTo(default(DateTimeOffset)));
Assert.That(actual.DanishIdentityNumber, Is.Not.Null.And.EqualTo(customer.DanishIdentityNumber));
Assert.That(actual.Email, Is.Not.Null.And.EqualTo(customer.Email));
Assert.That(actual.GivenName, Is.Not.Null.And.EqualTo(customer.GivenName));
Assert.That(actual.FamilyName, Is.Not.Null.And.EqualTo(customer.FamilyName));
Assert.That(actual.GivenName, Is.Not.Null.And.EqualTo(customer.GivenName));
Assert.That(actual.Language, Is.Not.Null.And.EqualTo(customer.Language));
Assert.That(actual.Metadata, Is.Not.Null.And.EqualTo(customer.Metadata));
Assert.That(actual.PhoneNumber, Is.Not.Null.And.EqualTo(customer.PhoneNumber));
Assert.That(actual.PostalCode, Is.Not.Null.And.EqualTo(customer.PostalCode));
Assert.That(actual.Region, Is.Not.Null.And.EqualTo(customer.Region));
Assert.That(actual.SwedishIdentityNumber, Is.Not.Null.And.EqualTo(customer.SwedishIdentityNumber));
}

[Test]
public async Task ReturnsIndividualCustomerForNewZealand()
{
// given
var customer = await _resourceFactory.CreateForeignCustomer();
var subject = new CustomersClient(_clientConfiguration);

// when
var result = await subject.ForIdAsync(customer.Id);
var actual = result.Item;

// then
Assert.That(actual, Is.Not.Null);
Assert.That(actual.Id, Is.Not.Null);
Assert.That(actual.AddressLine1, Is.Not.Null.And.EqualTo(customer.AddressLine1));
Assert.That(actual.AddressLine2, Is.Not.Null.And.EqualTo(customer.AddressLine2));
Assert.That(actual.AddressLine3, Is.Not.Null.And.EqualTo(customer.AddressLine3));
Assert.That(actual.City, Is.Not.Null.And.EqualTo(customer.City));
Assert.That(actual.Region, Is.Not.Null.And.EqualTo(customer.Region));
Assert.That(actual.PostalCode, Is.Not.Null.And.EqualTo(customer.PostalCode));
Assert.That(actual.CountryCode, Is.Not.Null.And.EqualTo(customer.CountryCode));
Assert.That(actual.CreatedAt, Is.Not.EqualTo(default(DateTimeOffset)));
Assert.That(actual.Email, Is.Not.Null.And.EqualTo(customer.Email));
Assert.That(actual.FamilyName, Is.Not.Null.And.EqualTo(customer.FamilyName));
Assert.That(actual.GivenName, Is.Not.Null.And.EqualTo(customer.GivenName));
Assert.That(actual.Language, Is.Not.Null.And.EqualTo(customer.Language));
Assert.That(actual.DanishIdentityNumber, Is.Not.Null.And.EqualTo(customer.DanishIdentityNumber));
Assert.That(actual.SwedishIdentityNumber, Is.Not.Null.And.EqualTo(customer.SwedishIdentityNumber));
Assert.That(actual.Metadata, Is.Not.Null.And.EqualTo(customer.Metadata));
Assert.That(actual.PhoneNumber, Is.Not.Null.And.EqualTo(customer.PhoneNumber));
Assert.That(actual.PostalCode, Is.Not.Null.And.EqualTo(customer.PostalCode));
Assert.That(actual.Region, Is.Not.Null.And.EqualTo(customer.Region));
}

[Test]
Expand All @@ -173,15 +207,16 @@ public async Task UpdatesCustomerPreservingMetadata()
AddressLine2 = "Address Line 2",
AddressLine3 = "Address Line 3",
City = "London",
CompanyName = "Company Name",
CountryCode = "DK",
CompanyName = "Company Name 2",
CountryCode = "NZ",
DanishIdentityNumber = "2205506218",
Email = "email@example.com",
FamilyName = "Family Name",
GivenName = "Given Name",
Language = "da",
FamilyName = "Family Name 2",
GivenName = "Given Name 2",
Language = "en",
PhoneNumber = "+44 1235 567890",
PostalCode = "SW1A 1AA",
Region = "Essex",
Region = "Region",
};

// when
Expand All @@ -203,6 +238,7 @@ public async Task UpdatesCustomerPreservingMetadata()
Assert.That(actual.GivenName, Is.EqualTo(request.GivenName));
Assert.That(actual.Language, Is.EqualTo(request.Language));
Assert.That(actual.Metadata, Is.EqualTo(customer.Metadata));
Assert.That(actual.PhoneNumber, Is.EqualTo(request.PhoneNumber));
Assert.That(actual.PostalCode, Is.EqualTo(request.PostalCode));
Assert.That(actual.Region, Is.EqualTo(request.Region));
}
Expand All @@ -221,21 +257,22 @@ public async Task UpdatesCustomerReplacingMetadata()
AddressLine2 = "Address Line 2",
AddressLine3 = "Address Line 3",
City = "London",
CompanyName = "Company Name",
CountryCode = "DK",
CompanyName = "Company Name 2",
CountryCode = "NZ",
DanishIdentityNumber = "2205506218",
Email = "email@example.com",
FamilyName = "Family Name",
GivenName = "Given Name",
Language = "da",
PostalCode = "SW1A 1AA",
Region = "Essex",
FamilyName = "Family Name 2",
GivenName = "Given Name 22",
Language = "en",
Metadata = new Dictionary<string, string>
{
["Key4"] = "Value6",
["Key5"] = "Value7",
["Key6"] = "Value8",
},
PhoneNumber = "+44 1235 567890",
PostalCode = "SW1A 1AA",
Region = "Essex",
};

// when
Expand All @@ -257,6 +294,7 @@ public async Task UpdatesCustomerReplacingMetadata()
Assert.That(actual.GivenName, Is.EqualTo(request.GivenName));
Assert.That(actual.Language, Is.EqualTo(request.Language));
Assert.That(actual.Metadata, Is.EqualTo(request.Metadata));
Assert.That(actual.PhoneNumber, Is.EqualTo(request.PhoneNumber));
Assert.That(actual.PostalCode, Is.EqualTo(request.PostalCode));
Assert.That(actual.Region, Is.EqualTo(request.Region));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public async Task CreatesMandateImportEntries()
FamilyName = "Family Name",
GivenName = "Given Name",
Language = "da",
PhoneNumber = "+44 1234 567890",
PostalCode = "SW1A 1AA",
Region = "Essex",
SwedishIdentityNumber = "5302256218",
Expand Down
45 changes: 44 additions & 1 deletion tests/GoCardless.Api.Tests.Integration/MandatePdfsClientTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using GoCardless.Api.MandatePdfs;
using GoCardless.Api.Models;
using GoCardless.Api.Tests.Integration.TestHelpers;
using NUnit.Framework;
using System;
Expand All @@ -9,7 +10,7 @@ namespace GoCardless.Api.Tests.Integration
public class MandatePdfsClientTests : IntegrationTest
{
[Test]
public async Task CreatesMandatePdf()
public async Task CreatesMandatePdfUsingMandate()
{
// given
var creditor = await _resourceFactory.Creditor();
Expand All @@ -35,5 +36,47 @@ public async Task CreatesMandatePdf()
Assert.That(result.Item.ExpiresAt, Is.Not.Null.And.Not.EqualTo(default(DateTimeOffset)));
Assert.That(result.Item.Url, Is.Not.Null);
}

[Test]
public async Task CreatesMandatePdfUsingSuppliedDetails()
{
// given
var creditor = await _resourceFactory.Creditor();
var customer = await _resourceFactory.CreateLocalCustomer();
var customerBankAccount = await _resourceFactory.CreateCustomerBankAccountFor(customer);
var mandate = await _resourceFactory.CreateMandateFor(creditor, customer, customerBankAccount);
var subject = new MandatePdfsClient(_clientConfiguration);

var request = new CreateMandatePdfRequest
{
AccountHolderName = "Account holder",
AccountNumber = "44779911",
AddressLine1 = "Address line 1",
AddressLine2 = "Address line 2",
AddressLine3 = "Address line 3",
BankCode = "Bank code",
Bic = "Bic",
City = "City",
CountryCode = "Country code",
DanishIdentityNumber = "2205506218",
Iban = "GB18 BARC 1234 5678",
Language = "en",
MandateReference = "MR12345678",
PhoneNumber = "+44 20 7183 8674",
PostalCode = "SW1A 1AA",
Region = "Essex",
Scheme = Scheme.BecsNz,
SignatureDate = DateTime.Now,
SwedishIdentityNumber = "5302256218",
};

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

// then
Assert.That(result.Item, Is.Not.Null);
Assert.That(result.Item.ExpiresAt, Is.Not.Null.And.Not.EqualTo(default(DateTimeOffset)));
Assert.That(result.Item.Url, Is.Not.Null);
}
}
}
Loading

0 comments on commit eb72380

Please sign in to comment.