Add AbpOpenIddictApplicationStore_Tests

pull/12084/head
liangshiwei 3 years ago
parent a4317b51ef
commit 714cdae4e6

@ -1,3 +0,0 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

@ -1,6 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
@ -14,7 +13,6 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Volo\Abp\OpenIddict\Applications" />
<Folder Include="Volo\Abp\OpenIddict\Authorizations" />
<Folder Include="Volo\Abp\OpenIddict\Scopes" />
<Folder Include="Volo\Abp\OpenIddict\Tokens" />

@ -0,0 +1,380 @@
using System;
using System.Collections.Immutable;
using System.Globalization;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using OpenIddict.Abstractions;
using Shouldly;
using Xunit;
namespace Volo.Abp.OpenIddict.Applications;
public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
private readonly IOpenIddictApplicationStore<OpenIddictApplicationModel> _applicationStore;
public AbpOpenIddictApplicationStore_Tests()
{
_applicationStore = ServiceProvider.GetRequiredService<IOpenIddictApplicationStore<OpenIddictApplicationModel>>();
}
[Fact]
public async Task FindByIdAsync_Should_Return_Null_If_Not_Found()
{
var nonExistingId = Guid.NewGuid().ToString();
var application = await _applicationStore.FindByIdAsync(nonExistingId, CancellationToken.None);
application.ShouldBeNull();
}
[Fact]
public async Task FindByIdAsync_Should_Return_Application_If_Found()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
application.ShouldNotBeNull();
application.ClientId.ShouldBe(AbpOpenIddictTestData.App1ClientId);
application.ConsentType.ShouldBe(OpenIddictConstants.ConsentTypes.Explicit);
application.DisplayName.ShouldBe("Test Application");
}
[Fact]
public async Task FindByClientIdAsync_Should_Return_Null_If_Not_Found()
{
var nonExistingClientId = Guid.NewGuid().ToString();
var application = await _applicationStore.FindByClientIdAsync(nonExistingClientId, CancellationToken.None);
application.ShouldBeNull();
}
[Fact]
public async Task FindByClientIdAsync_Should_Return_Application_If_Found()
{
var application = await _applicationStore.FindByClientIdAsync(AbpOpenIddictTestData.App1ClientId, CancellationToken.None);
application.ShouldNotBeNull();
application.ClientId.ShouldBe(AbpOpenIddictTestData.App1ClientId);
application.ConsentType.ShouldBe(OpenIddictConstants.ConsentTypes.Explicit);
application.DisplayName.ShouldBe("Test Application");
}
[Fact]
public async Task CountAsync()
{
var count = await _applicationStore.CountAsync(CancellationToken.None);
count.ShouldBe(2);
}
[Fact]
public async Task CreateAsync()
{
var clientId = Guid.NewGuid().ToString();
await _applicationStore.CreateAsync(new OpenIddictApplicationModel {
ClientId = clientId,
ConsentType = OpenIddictConstants.ConsentTypes.Explicit,
DisplayName = "Test Application",
Type = OpenIddictConstants.ClientTypes.Public,
PostLogoutRedirectUris = "https://abp.io",
RedirectUris = "https://abp.io"
}, CancellationToken.None);
var application = await _applicationStore.FindByClientIdAsync(clientId, CancellationToken.None);
application.ShouldNotBeNull();
application.ClientId.ShouldBe(clientId);
application.DisplayName.ShouldBe("Test Application");
application.Type.ShouldBe(OpenIddictConstants.ClientTypes.Public);
application.PostLogoutRedirectUris.ShouldBe("https://abp.io");
application.RedirectUris.ShouldBe("https://abp.io");
}
[Fact]
public async Task DeleteAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
application.ShouldNotBeNull();
await _applicationStore.DeleteAsync(application, CancellationToken.None);
application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
application.ShouldBeNull();
}
[Fact]
public async Task FindByPostLogoutRedirectUriAsync_Should_Return_Empty_If_Not_Found()
{
var applications = await _applicationStore.FindByPostLogoutRedirectUriAsync("non-existing-uri", CancellationToken.None).ToListAsync();
applications.Count.ShouldBe(0);
}
[Fact]
public async Task FindByPostLogoutRedirectUriAsync_Should_Return_Applications_If_Found()
{
var applications = await _applicationStore.FindByPostLogoutRedirectUriAsync("https://abp.io", CancellationToken.None).ToListAsync();
applications.Count.ShouldBe(2);
}
[Fact]
public async Task FindByRedirectUriAsync_Should_Return_Empty_If_Not_Found()
{
var applications = await _applicationStore.FindByRedirectUriAsync("non-existing-uri", CancellationToken.None).ToListAsync();
applications.Count.ShouldBe(0);
}
[Fact]
public async Task FindByRedirectUriAsync_Should_Return_Applications_If_Found()
{
var applications = await _applicationStore.FindByRedirectUriAsync("https://abp.io", CancellationToken.None).ToListAsync();
applications.Count.ShouldBe(2);
}
[Fact]
public async Task GetClientIdAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var clientId = await _applicationStore.GetClientIdAsync(application, CancellationToken.None);
clientId.ShouldBe(AbpOpenIddictTestData.App1ClientId);
}
[Fact]
public async Task GetClientSecretAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var secret = await _applicationStore.GetClientIdAsync(application, CancellationToken.None);
secret.ShouldBe("Client1");
}
[Fact]
public async Task GetClientTypeAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var clientType = await _applicationStore.GetClientTypeAsync(application, CancellationToken.None);
clientType.ShouldBe(OpenIddictConstants.ClientTypes.Public);
}
[Fact]
public async Task GetConsentTypeAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var consentType = await _applicationStore.GetConsentTypeAsync(application, CancellationToken.None);
consentType.ShouldBe(OpenIddictConstants.ConsentTypes.Explicit);
}
[Fact]
public async Task GetDisplayNameAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var displayName = await _applicationStore.GetDisplayNameAsync(application, CancellationToken.None);
displayName.ShouldBe("Test Application");
}
[Fact]
public async Task GetIdAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var id = await _applicationStore.GetIdAsync(application, CancellationToken.None);
id.ShouldBe(AbpOpenIddictTestData.App1Id.ToString());
}
[Fact]
public async Task GetPermissionsAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var permissions = await _applicationStore.GetPermissionsAsync(application, CancellationToken.None);
permissions.Length.ShouldBeGreaterThan(0);
}
[Fact]
public async Task GetPostLogoutRedirectUrisAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var postLogoutRedirectUris = await _applicationStore.GetPostLogoutRedirectUrisAsync(application, CancellationToken.None);
postLogoutRedirectUris.Length.ShouldBe(1);
postLogoutRedirectUris[0].ShouldBe("https://abp.io");
}
[Fact]
public async Task GetRedirectUrisAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var redirectUris = await _applicationStore.GetRedirectUrisAsync(application, CancellationToken.None);
redirectUris.Length.ShouldBe(1);
redirectUris[0].ShouldBe("https://abp.io");
}
[Fact]
public async Task GetPropertiesAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var properties = await _applicationStore.GetPropertiesAsync(application, CancellationToken.None);
properties.Count.ShouldBe(0);
}
[Fact]
public async Task GetRequirementsAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
var requirements = await _applicationStore.GetRequirementsAsync(application, CancellationToken.None);
requirements.Length.ShouldBe(0);
}
[Fact]
public async Task InstantiateAsync()
{
var application = await _applicationStore.InstantiateAsync(CancellationToken.None);
application.ShouldNotBeNull();
}
[Fact]
public async Task ListAsync_Should_Return_Empty_If_Not_Found()
{
var applications = await _applicationStore.ListAsync(2,2, CancellationToken.None).ToListAsync();
applications.Count.ShouldBe(0);
}
[Fact]
public async Task ListAsync_Should_Return_Applications_If_Found()
{
var applications = await _applicationStore.ListAsync(2,0, CancellationToken.None).ToListAsync();
applications.Count.ShouldBe(2);
}
[Fact]
public async Task SetClientIdAsync()
{
var clientId = Guid.NewGuid().ToString();
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetClientIdAsync(application, clientId, CancellationToken.None);
application.ClientId.ShouldBe(clientId);
}
[Fact]
public async Task SetClientSecretAsync()
{
var clientSecret = Guid.NewGuid().ToString();
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetClientSecretAsync(application, clientSecret, CancellationToken.None);
application.ClientSecret.ShouldBe(clientSecret);
}
[Fact]
public async Task SetClientTypeAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetClientTypeAsync(application, OpenIddictConstants.ClientTypes.Confidential, CancellationToken.None);
application.Type.ShouldBe(OpenIddictConstants.ClientTypes.Confidential);
}
[Fact]
public async Task SetConsentTypeAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetConsentTypeAsync(application, OpenIddictConstants.ConsentTypes.Systematic, CancellationToken.None);
application.ConsentType.ShouldBe(OpenIddictConstants.ConsentTypes.Systematic);
}
[Fact]
public async Task SetDisplayNameAsync()
{
var displayName = Guid.NewGuid().ToString();
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetDisplayNameAsync(application, displayName, CancellationToken.None);
application.DisplayName.ShouldBe(displayName);
}
[Fact]
public async Task SetDisplayNamesAsync()
{
var displayNames = ImmutableDictionary.Create<CultureInfo, string>();
displayNames = displayNames.Add(CultureInfo.GetCultureInfo("en"), "Test Application");
displayNames = displayNames.Add(CultureInfo.GetCultureInfo("zh-Hans"), "测试应用程序");
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetDisplayNamesAsync(application, displayNames, CancellationToken.None);
application.DisplayNames.ShouldContain("Test Application");
application.DisplayNames.ShouldContain("测试应用程序");
}
[Fact]
public async Task SetPermissionsAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetPermissionsAsync(application, ImmutableArray.Create(OpenIddictConstants.Permissions.Endpoints.Authorization), CancellationToken.None);
application.Permissions.ShouldBe("[\""+OpenIddictConstants.Permissions.Endpoints.Authorization+"\"]");
}
[Fact]
public async Task SetPostLogoutRedirectUrisAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetPostLogoutRedirectUrisAsync(application, ImmutableArray.Create("https://abp.io"), CancellationToken.None);
application.PostLogoutRedirectUris.ShouldBe("[\"https://abp.io\"]");
}
[Fact]
public async Task SetPropertiesAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetPropertiesAsync(application, ImmutableDictionary.Create<string, JsonElement>(), CancellationToken.None);
application.Properties.ShouldBeNull();
}
[Fact]
public async Task SetRedirectUrisAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetRedirectUrisAsync(application, ImmutableArray.Create("https://abp.io"), CancellationToken.None);
application.RedirectUris.ShouldBe("[\"https://abp.io\"]");
}
[Fact]
public async Task SetRequirementsAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetRequirementsAsync(application, ImmutableArray.Create(OpenIddictConstants.Requirements.Features.ProofKeyForCodeExchange), CancellationToken.None);
application.Requirements.ShouldBe("[\""+OpenIddictConstants.Requirements.Features.ProofKeyForCodeExchange+"\"]");
}
[Fact]
public async Task UpdateAsync()
{
var application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
application.ClientId = "new_client_id";
application.Type = OpenIddictConstants.ClientTypes.Public;
application.RedirectUris = "https://new_logout_uri";
application.PostLogoutRedirectUris = "https://new_post_logout_uri";
application.DisplayName = "new_display_name";
await _applicationStore.UpdateAsync(application, CancellationToken.None);
application = await _applicationStore.FindByIdAsync(AbpOpenIddictTestData.App1Id.ToString(), CancellationToken.None);
application.ShouldNotBeNull();
application.ClientId.ShouldBe("new_client_id");
application.Type.ShouldBe(OpenIddictConstants.ClientTypes.Public);
application.RedirectUris.ShouldBe("https://new_logout_uri");
application.PostLogoutRedirectUris.ShouldBe("https://new_post_logout_uri");
application.DisplayName.ShouldBe("new_display_name");
}
}

@ -1,3 +0,0 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

@ -1,6 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>

@ -1,3 +0,0 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

@ -1,6 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>

@ -1,3 +0,0 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

@ -35,7 +35,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
private async Task CreateScopesAsync()
{
var scope1 = (OpenIddictScope)await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor()
var scope1 = (OpenIddictScopeModel)await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor()
{
Name = AbpOpenIddictTestData.Scope1Name,
DisplayName = "Test Scope 1",
@ -51,7 +51,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
});
AbpOpenIddictTestData.Scope1Id = scope1.Id;
var scope2 = (OpenIddictScope)await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor()
var scope2 = (OpenIddictScopeModel)await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor()
{
Name = AbpOpenIddictTestData.Scope2Name,
DisplayName = "Test Scope 2",
@ -71,7 +71,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
private async Task CreateApplicationsAsync()
{
var app1 = (OpenIddictApplication)await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
var app1 = (OpenIddictApplicationModel)await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
{
ClientId = AbpOpenIddictTestData.App1ClientId,
ConsentType = OpenIddictConstants.ConsentTypes.Explicit,
@ -120,7 +120,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
});
AbpOpenIddictTestData.App1Id = app1.Id;
var app2 = (OpenIddictApplication)await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
var app2 = (OpenIddictApplicationModel)await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
{
ClientId = AbpOpenIddictTestData.App2ClientId,
ConsentType = OpenIddictConstants.ConsentTypes.Explicit,

@ -1,6 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
@ -12,6 +11,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="NSubstitute" Version="4.2.2" />
<PackageReference Include="Shouldly" Version="4.0.3" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />

Loading…
Cancel
Save