forked from iSHAREScheme/iSHARE.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTestsBase.cs
60 lines (51 loc) · 2.17 KB
/
TestsBase.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System.IO;
using System.Threading.Tasks;
using iSHARE.AccessToken;
using iSHARE.AccessToken.Args;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace iSHARE.IntegrationTests
{
public class TestsBase
{
static TestsBase()
{
Configuration = BuildConfiguration();
ServiceScope = CreateServiceScope();
}
protected static IConfiguration Configuration { get; }
protected static IServiceScope ServiceScope { get; }
protected static async Task<string> GetAccessTokenAsync()
{
var clientAssertion = JwtUtilities.Create(
issuer: Constants.AbcParty.ClientId,
audience: Constants.SchemeOwner.ClientId,
Constants.AbcParty.PrivateKey,
Constants.AbcParty.PublicKeyBase64Der);
var requestArgs = CreateRequestArgs(clientAssertion);
var accessTokenAccessor = ServiceScope.ServiceProvider.GetRequiredService<IAccessTokenAccessor>();
return await accessTokenAccessor.GetAsync(requestArgs);
}
private static AccessTokenRequestArgs CreateRequestArgs(
string clientAssertion,
string requestUri = Constants.SchemeOwner.AccessTokenRequestUri) =>
new AccessTokenRequestArgs(requestUri, Constants.AbcParty.ClientId, clientAssertion);
private static IConfigurationRoot BuildConfiguration() =>
new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false)
.Build();
private static IServiceScope CreateServiceScope() =>
new HostBuilder()
.ConfigureServices((context, services) => RegisterServices(services))
.UseConsoleLifetime()
.Build()
.Services.CreateScope();
private static void RegisterServices(IServiceCollection services)
{
services.RegisterDefaultSettings(Configuration);
services.AddIShareServices(isProduction: false);
}
}
}