diff --git a/NordigenDotNet.sln.DotSettings b/NordigenDotNet.sln.DotSettings
new file mode 100644
index 0000000..48df07a
--- /dev/null
+++ b/NordigenDotNet.sln.DotSettings
@@ -0,0 +1,2 @@
+
+ True
\ No newline at end of file
diff --git a/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Accounts/AccountClientTests.cs b/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Accounts/AccountClientTests.cs
index 880e3c1..10136b4 100644
--- a/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Accounts/AccountClientTests.cs
+++ b/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Accounts/AccountClientTests.cs
@@ -7,34 +7,141 @@ using System.Threading.Tasks;
using NodaTime;
+using VMelnalksnis.NordigenDotNet.Accounts;
+using VMelnalksnis.NordigenDotNet.Requisitions;
+
+using Xunit.Abstractions;
+
+using static VMelnalksnis.NordigenDotNet.Tests.Integration.ServiceProviderFixture;
+
namespace VMelnalksnis.NordigenDotNet.Tests.Integration.Accounts;
public sealed class AccountClientTests : IClassFixture
{
+ private readonly ITestOutputHelper _testOutputHelper;
private readonly INordigenClient _nordigenClient;
+ private readonly Requisition _requisition;
- public AccountClientTests(ServiceProviderFixture serviceProviderFixture)
+ public AccountClientTests(ITestOutputHelper testOutputHelper, ServiceProviderFixture serviceProviderFixture)
{
+ _testOutputHelper = testOutputHelper;
_nordigenClient = serviceProviderFixture.NordigenClient;
+
+ _requisition = GetRequisition().GetAwaiter().GetResult();
}
- [Fact(Skip = "Requires manual setup at least every 90 days")]
- public async Task Get()
+ [Fact]
+ public async Task Get_ShouldReturnExpected()
{
- var requisition = await _nordigenClient.Requisitions.Get().SingleAsync();
+ _requisition.Accounts.Should().HaveCount(2);
+ var id = _requisition.Accounts.First();
- foreach (var id in requisition.Accounts)
+ var account = await _nordigenClient.Accounts.Get(id);
+ var currentInstant = SystemClock.Instance.GetCurrentInstant();
+ using (new AssertionScope())
{
- await _nordigenClient.Accounts.Get(id);
- await _nordigenClient.Accounts.GetDetails(id);
- await _nordigenClient.Accounts.GetBalances(id);
-
- var dateTo = SystemClock.Instance.GetCurrentInstant();
- var dateFrom = dateTo - Duration.FromDays(7);
- var transactions = await _nordigenClient.Accounts.GetTransactions(id, new Interval(dateFrom, dateTo));
- var allTransactions = await _nordigenClient.Accounts.GetTransactions(id);
-
- transactions.Booked.Should().BeSubsetOf(allTransactions.Booked);
+ account.Id.Should().Be(id);
+ account.Created.Should().BeLessThan(account.LastAccessed).And.BeLessThan(currentInstant);
+ account.LastAccessed.Should().BeGreaterThan(currentInstant - Duration.FromMinutes(1));
+ account.Iban.Should().Be("GL3343697694912188");
+ account.InstitutionId.Should().Be(IntegrationInstitutionId);
+ account.Status.Should().Be(AccountStatus.Ready);
}
}
+
+ [Fact]
+ public async Task GetDetails_ShouldReturnExpected()
+ {
+ var id = _requisition.Accounts.First();
+
+ var accountDetails = await _nordigenClient.Accounts.GetDetails(id);
+
+ using (new AssertionScope())
+ {
+ accountDetails.ResourceId.Should().Be("01F3NS4YV94RA29YCH8R0F6BMF");
+ accountDetails.Iban.Should().Be("GL3343697694912188");
+ accountDetails.Currency.Should().Be("EUR");
+ accountDetails.OwnerName.Should().Be("John Doe");
+ accountDetails.Name.Should().Be("Main Account");
+ accountDetails.Product.Should().Be("Checkings");
+ accountDetails.CashAccountType.Should().Be("CACC");
+ }
+ }
+
+ [Fact]
+ public async Task GetBalances_ShouldReturnExpected()
+ {
+ var id = _requisition.Accounts.First();
+
+ var balances = await _nordigenClient.Accounts.GetBalances(id);
+
+ balances.Should().HaveCount(2);
+
+ var firstBalance = balances.First();
+ var secondBalance = balances.Last();
+ using (new AssertionScope())
+ {
+ firstBalance.Should().BeEquivalentTo(secondBalance, options => options.Excluding(balance => balance.BalanceType));
+ firstBalance.BalanceType.Should().Be("expected");
+ secondBalance.BalanceType.Should().Be("interimAvailable");
+ }
+ }
+
+ [Fact]
+ public async Task GetTransactions_ShouldReturnExpected()
+ {
+ var id = _requisition.Accounts.First();
+
+ var dateTo = SystemClock.Instance.GetCurrentInstant();
+ var dateFrom = dateTo - Duration.FromDays(7);
+ var transactions = await _nordigenClient.Accounts.GetTransactions(id, new Interval(dateFrom, dateTo));
+ var allTransactions = await _nordigenClient.Accounts.GetTransactions(id);
+
+ using (new AssertionScope())
+ {
+ allTransactions.Booked.Should().HaveCount(534);
+ transactions.Booked.Should().HaveCount(42).And.BeSubsetOf(allTransactions.Booked);
+ transactions.Pending.Should().BeEquivalentTo(allTransactions.Pending);
+
+ var pendingTransaction = transactions.Pending.Should().ContainSingle().Subject;
+ pendingTransaction.TransactionAmount.Currency.Should().Be("EUR");
+ pendingTransaction.TransactionAmount.Amount.Should().Be(10m);
+ pendingTransaction.UnstructuredInformation.Should().Be("Reserved PAYMENT Emperor's Burgers");
+ pendingTransaction.ValueDate.Should().Be(new LocalDate(2022, 06, 21));
+
+ var bookedTransaction = transactions.Booked.Single(transaction => transaction.TransactionId is "2022062201927902-1");
+ bookedTransaction.TransactionAmount.Currency.Should().Be("EUR");
+ bookedTransaction.TransactionAmount.Amount.Should().Be(-15);
+ bookedTransaction.UnstructuredInformation.Should().Be("PAYMENT Alderaan Coffe");
+ bookedTransaction.ValueDate.Should().Be(new LocalDate(2022, 06, 22));
+ bookedTransaction.TransactionId.Should().Be("2022062201927902-1");
+ bookedTransaction.BookingDate.Should().Be(new(2022, 06, 22));
+ bookedTransaction.DebtorName.Should().BeNull();
+ bookedTransaction.DebtorAccount.Should().BeNull();
+ bookedTransaction.CreditorName.Should().BeNull();
+ bookedTransaction.CreditorAccount.Should().BeNull();
+ bookedTransaction.BankTransactionCode.Should().Be("PMNT");
+ bookedTransaction.EntryReference.Should().BeNull();
+ bookedTransaction.AdditionalInformation.Should().BeNull();
+ }
+ }
+
+ private async Task GetRequisition()
+ {
+ var requisition = await _nordigenClient.Requisitions.Get().SingleOrDefaultAsync(r => r.InstitutionId is IntegrationInstitutionId);
+ if (requisition is not null && requisition.Status is not RequisitionStatus.Ex)
+ {
+ return requisition;
+ }
+
+ var creation = new RequisitionCreation(new("https://github.com/VMelnalksnis/NordigenDotNet"), IntegrationInstitutionId);
+ var createdRequisition = await _nordigenClient.Requisitions.Post(creation);
+
+ var message = $@"Access to an institution needs to be approved every 90 days.
+Please go to {createdRequisition.Link} and rerun this test.
+For more information see https://nordigen.com/en/account_information_documenation/integration/sandbox/";
+
+ _testOutputHelper.WriteLine(message);
+ throw new(message);
+ }
}
diff --git a/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Agreements/AgreementClientTests.cs b/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Agreements/AgreementClientTests.cs
index 8dc1b58..f857414 100644
--- a/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Agreements/AgreementClientTests.cs
+++ b/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Agreements/AgreementClientTests.cs
@@ -11,6 +11,8 @@ using NodaTime;
using VMelnalksnis.NordigenDotNet.Agreements;
+using static VMelnalksnis.NordigenDotNet.Tests.Integration.ServiceProviderFixture;
+
namespace VMelnalksnis.NordigenDotNet.Tests.Integration.Agreements;
public sealed class AgreementClientTests : IClassFixture
@@ -25,7 +27,7 @@ public sealed class AgreementClientTests : IClassFixture
[Fact]
public async Task Get()
{
- var creation = new EndUserAgreementCreation("CITADELE_PARXLV22");
+ var creation = new EndUserAgreementCreation(IntegrationInstitutionId);
var createdAgreement = await _nordigenClient.Agreements.Post(creation);
(await _nordigenClient.Agreements.Get(createdAgreement.Id)).Should().BeEquivalentTo(createdAgreement);
diff --git a/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Requisitions/RequisitionsClientTests.cs b/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Requisitions/RequisitionsClientTests.cs
index 618ced3..5fbc266 100644
--- a/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Requisitions/RequisitionsClientTests.cs
+++ b/tests/VMelnalksnis.NordigenDotNet.Tests.Integration/Requisitions/RequisitionsClientTests.cs
@@ -11,6 +11,8 @@ using NodaTime;
using VMelnalksnis.NordigenDotNet.Requisitions;
+using static VMelnalksnis.NordigenDotNet.Tests.Integration.ServiceProviderFixture;
+
namespace VMelnalksnis.NordigenDotNet.Tests.Integration.Requisitions;
public sealed class RequisitionsClientTests : IClassFixture
@@ -25,7 +27,7 @@ public sealed class RequisitionsClientTests : IClassFixture