feat: Cache tokens between calls (#19)

This commit is contained in:
Valters Melnalksnis
2022-06-16 20:22:52 +03:00
parent da99d06272
commit d391cb7721
8 changed files with 135 additions and 10 deletions
@@ -28,7 +28,7 @@ public sealed class ServiceCollectionExtensionsTests
var serviceCollection = new ServiceCollection();
serviceCollection.AddNordigenDotNet(configuration, DateTimeZoneProviders.Tzdb);
serviceCollection.AddNordigenDotNet(configuration, SystemClock.Instance, DateTimeZoneProviders.Tzdb);
var serviceProvider = serviceCollection.BuildServiceProvider();
var nordigenClient = serviceProvider.GetRequiredService<INordigenClient>();
@@ -10,6 +10,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using NodaTime;
using NodaTime.Testing;
using VMelnalksnis.NordigenDotNet.DependencyInjection;
@@ -22,16 +23,20 @@ public sealed class ServiceProviderFixture
public ServiceProviderFixture()
{
Clock = new(SystemClock.Instance.GetCurrentInstant());
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddUserSecrets<ServiceProviderFixture>()
.Build();
var serviceCollection = new ServiceCollection();
serviceCollection.AddNordigenDotNet(configuration, DateTimeZoneProviders.Tzdb);
serviceCollection.AddNordigenDotNet(configuration, Clock, DateTimeZoneProviders.Tzdb);
_serviceProvider = serviceCollection.BuildServiceProvider();
}
public FakeClock Clock { get; }
public INordigenClient NordigenClient => _serviceProvider.GetRequiredService<INordigenClient>();
}
@@ -0,0 +1,35 @@
// 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 NodaTime.Testing;
namespace VMelnalksnis.NordigenDotNet.Tests.Integration.Tokens;
public sealed class TokenDelegatingHandlerTests : IClassFixture<ServiceProviderFixture>
{
private readonly FakeClock _fakeClock;
private readonly INordigenClient _nordigenClient;
public TokenDelegatingHandlerTests(ServiceProviderFixture serviceProviderFixture)
{
_fakeClock = serviceProviderFixture.Clock;
_nordigenClient = serviceProviderFixture.NordigenClient;
}
[Theory]
[InlineData(86400)]
[InlineData(2592000)]
public async Task ShouldSucceedAfterPeriod(int seconds)
{
var expectedAgreement = await _nordigenClient.Agreements.Get().OrderBy(a => a.Created).FirstAsync();
_fakeClock.AdvanceSeconds(seconds);
var agreement = await _nordigenClient.Agreements.Get().OrderBy(a => a.Created).FirstAsync();
agreement.Should().BeEquivalentTo(expectedAgreement);
}
}
@@ -15,6 +15,7 @@
<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="NodaTime.Testing" Version="3.1.0"/>
<PackageReference Include="System.Linq.Async" Version="6.0.1"/>
</ItemGroup>