feat: Add endpoints

This commit is contained in:
Valters Melnalksnis
2022-06-14 20:13:08 +03:00
parent 9eb16c07e8
commit 5a458e0c53
45 changed files with 1295 additions and 24 deletions
+1
View File
@@ -13,6 +13,7 @@
<PackageReference Include="FluentAssertions" Version="6.7.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0"/>
<PackageReference Include="xunit" Version="2.4.1"/>
<PackageReference Include="xunit.analyzers" Version="0.10.0"/>
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
@@ -0,0 +1,38 @@
// Copyright 2022 Valters Melnalksnis
// Licensed under the Apache License 2.0.
// See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using NodaTime;
namespace VMelnalksnis.NordigenDotNet.DependencyInjection.Tests;
public sealed class ServiceCollectionExtensionsTests
{
[Fact]
public void AddNordigenDotNet_ShouldRegisterRequiredServices()
{
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(new List<KeyValuePair<string, string>>
{
new($"{NordigenOptions.SectionName}:{nameof(NordigenOptions.BaseAddress)}", "https://ob.nordigen.com/"),
new($"{NordigenOptions.SectionName}:{nameof(NordigenOptions.SecretId)}", $"{Guid.NewGuid():D}"),
new($"{NordigenOptions.SectionName}:{nameof(NordigenOptions.SecretKey)}", $"{Guid.NewGuid():N}"),
})
.Build();
var serviceCollection = new ServiceCollection();
serviceCollection.AddNordigenDotNet(configuration, DateTimeZoneProviders.Tzdb);
var serviceProvider = serviceCollection.BuildServiceProvider();
var nordigenClient = serviceProvider.GetRequiredService<INordigenClient>();
nordigenClient.Should().NotBeNull();
}
}
@@ -6,6 +6,11 @@
<ItemGroup>
<ProjectReference Include="..\..\source\VMelnalksnis.NordigenDotNet\VMelnalksnis.NordigenDotNet.csproj"/>
<ProjectReference Include="..\..\VMelnalksnis.NordigenDotNet.DependencyInjection\VMelnalksnis.NordigenDotNet.DependencyInjection.csproj"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1"/>
</ItemGroup>
</Project>
@@ -0,0 +1,37 @@
// Copyright 2022 Valters Melnalksnis
// Licensed under the Apache License 2.0.
// See LICENSE file in the project root for full license information.
using System.Linq;
using System.Threading.Tasks;
using VMelnalksnis.NordigenDotNet.Accounts;
using VMelnalksnis.NordigenDotNet.Requisitions;
namespace VMelnalksnis.NordigenDotNet.Tests.Integration.Accounts;
public sealed class AccountClientTests : IClassFixture<ServiceProviderFixture>
{
private readonly IAccountClient _accountClient;
private readonly IRequisitionClient _requisitionClient;
public AccountClientTests(ServiceProviderFixture serviceProviderFixture)
{
_accountClient = serviceProviderFixture.AccountClient;
_requisitionClient = serviceProviderFixture.RequisitionClient;
}
[Fact]
public async Task Get()
{
var requisition = await _requisitionClient.Get().SingleAsync();
foreach (var id in requisition.Accounts)
{
await _accountClient.Get(id);
await _accountClient.GetDetails(id);
await _accountClient.GetBalances(id);
await _accountClient.GetTransactions(id);
}
}
}
@@ -0,0 +1,31 @@
// Copyright 2022 Valters Melnalksnis
// Licensed under the Apache License 2.0.
// See LICENSE file in the project root for full license information.
using System.Threading.Tasks;
using VMelnalksnis.NordigenDotNet.Institutions;
namespace VMelnalksnis.NordigenDotNet.Tests.Integration.Institutions;
public sealed class InstitutionClientTests : IClassFixture<ServiceProviderFixture>
{
private readonly IInstitutionClient _institutionClient;
public InstitutionClientTests(ServiceProviderFixture serviceProviderFixture)
{
_institutionClient = serviceProviderFixture.InstitutionClient;
}
[Fact]
public async Task GetByCountry()
{
var institutions = await _institutionClient.GetByCountry("LV");
institutions.Count.Should().Be(17);
var expectedInstitution = institutions.Should().ContainSingle(i => i.Id == "CITADELE_PARXLV22").Subject;
var institution = await _institutionClient.Get(expectedInstitution.Id);
institution.Should().BeEquivalentTo(expectedInstitution);
}
}
@@ -0,0 +1,50 @@
// Copyright 2022 Valters Melnalksnis
// Licensed under the Apache License 2.0.
// See LICENSE file in the project root for full license information.
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using VMelnalksnis.NordigenDotNet.Requisitions;
namespace VMelnalksnis.NordigenDotNet.Tests.Integration.Requisitions;
public sealed class RequisitionsClientTests : IClassFixture<ServiceProviderFixture>
{
private readonly IRequisitionClient _requisitionClient;
public RequisitionsClientTests(ServiceProviderFixture serviceProviderFixture)
{
_requisitionClient = serviceProviderFixture.RequisitionClient;
}
[Fact]
public async Task Get()
{
var requisitions = await _requisitionClient.Get().ToListAsync();
var expectedRequisition = requisitions.Should().ContainSingle().Subject;
var requisition = await _requisitionClient.Get(expectedRequisition.Id);
requisition.Should().BeEquivalentTo(expectedRequisition);
}
[Fact]
public async Task Post()
{
var creation = new RequisitionCreation(new("https://gnomeshade.org/"), "CITADELE_PARXLV22");
var requisition = await _requisitionClient.Post(creation);
await _requisitionClient.Delete(requisition.Id);
(await FluentActions
.Awaiting(() => _requisitionClient.Get(requisition.Id))
.Should()
.ThrowExactlyAsync<HttpRequestException>())
.Which.StatusCode
.Should()
.Be(HttpStatusCode.NotFound);
}
}
@@ -0,0 +1,44 @@
// Copyright 2022 Valters Melnalksnis
// Licensed under the Apache License 2.0.
// See LICENSE file in the project root for full license information.
using System;
using JetBrains.Annotations;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using NodaTime;
using VMelnalksnis.NordigenDotNet.Accounts;
using VMelnalksnis.NordigenDotNet.DependencyInjection;
using VMelnalksnis.NordigenDotNet.Institutions;
using VMelnalksnis.NordigenDotNet.Requisitions;
namespace VMelnalksnis.NordigenDotNet.Tests.Integration;
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)]
public sealed class ServiceProviderFixture
{
private readonly IServiceProvider _serviceProvider;
public ServiceProviderFixture()
{
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddUserSecrets<ServiceProviderFixture>()
.Build();
var serviceCollection = new ServiceCollection();
serviceCollection.AddNordigenDotNet(configuration, DateTimeZoneProviders.Tzdb);
_serviceProvider = serviceCollection.BuildServiceProvider();
}
public IAccountClient AccountClient => _serviceProvider.GetRequiredService<IAccountClient>();
public IInstitutionClient InstitutionClient => _serviceProvider.GetRequiredService<IInstitutionClient>();
public IRequisitionClient RequisitionClient => _serviceProvider.GetRequiredService<IRequisitionClient>();
}
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<UserSecretsId>471f5b3c-5334-4315-8d06-7bcfb17af644</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\VMelnalksnis.NordigenDotNet\VMelnalksnis.NordigenDotNet.csproj" />
<ProjectReference Include="..\..\VMelnalksnis.NordigenDotNet.DependencyInjection\VMelnalksnis.NordigenDotNet.DependencyInjection.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
</ItemGroup>
</Project>
@@ -1,14 +0,0 @@
// Copyright 2022 Valters Melnalksnis
// Licensed under the Apache License 2.0.
// See LICENSE file in the project root for full license information.
namespace VMelnalksnis.NordigenDotNet.Tests;
public sealed class PlaceholderTests
{
[Fact]
public void Pass()
{
Assert.True(true);
}
}