diff --git a/src/Identity/Directory.Build.targets b/src/Identity/Directory.Build.targets index 78626b773e..7e3f8df92e 100644 --- a/src/Identity/Directory.Build.targets +++ b/src/Identity/Directory.Build.targets @@ -1,10 +1,6 @@ - $(MicrosoftNETCoreApp20PackageVersion) - $(MicrosoftNETCoreApp21PackageVersion) - $(MicrosoftNETCoreApp22PackageVersion) + $(MicrosoftNETCoreAppPackageVersion) $(NETStandardLibrary20PackageVersion) - - 99.9 diff --git a/src/Identity/NuGetPackageVerifier.json b/src/Identity/NuGetPackageVerifier.json index 63a774a555..eff389943d 100644 --- a/src/Identity/NuGetPackageVerifier.json +++ b/src/Identity/NuGetPackageVerifier.json @@ -7,8 +7,8 @@ "Microsoft.AspNetCore.Identity.UI": { "Exclusions": { "DOC_MISSING": { - "lib/netstandard2.0/Microsoft.AspNetCore.Identity.UI.Views.V3.dll": "This assembly is generated and contains precompiled razor pages", - "lib/netstandard2.0/Microsoft.AspNetCore.Identity.UI.Views.V4.dll": "This assembly is generated and contains precompiled razor pages" + "lib/netcoreapp3.0/Microsoft.AspNetCore.Identity.UI.Views.V3.dll": "This assembly is generated and contains precompiled razor pages", + "lib/netcoreapp3.0/Microsoft.AspNetCore.Identity.UI.Views.V4.dll": "This assembly is generated and contains precompiled razor pages" } } } diff --git a/src/Identity/README.md b/src/Identity/README.md index 4e4f345af9..2d659ad4da 100644 --- a/src/Identity/README.md +++ b/src/Identity/README.md @@ -28,3 +28,4 @@ The previous versions of Identity for MVC5 and lower, previously available on Co * [ASP.NET Identity Cassandra Provider](https://github.com/lkubis/AspNetCore.Identity.Cassandra) * [ASP.NET Identity Firebase Provider](https://github.com/aguacongas/Identity.Firebase) * [ASP.NET Identity Redis Provider](https://github.com/aguacongas/Identity.Redis) + * [ASP.NET Identity DocumentDB](https://github.com/FelschR/AspNetCore.Identity.DocumentDB) diff --git a/src/Identity/build/dependencies.props b/src/Identity/build/dependencies.props index e9b3e6f8bc..63628e0e78 100644 --- a/src/Identity/build/dependencies.props +++ b/src/Identity/build/dependencies.props @@ -4,72 +4,67 @@ 0.9.9 - 2.2.0-preview2-20181004.6 2.3.0 2.3.0 2.3.0 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 + 3.0.0-build-20181114.5 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-alpha1-10742 + 3.0.0-preview-181113-11 2.2.1 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.0.9 - 2.1.3 - 2.2.0-preview3-27001-02 - 2.2.0-preview3-35425 + 3.0.0-preview-181109-02 + 3.0.0-preview-181109-02 + 3.0.0-preview-181109-02 + 3.0.0-preview-181109-02 + 3.0.0-preview-181109-02 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview-181113-11 + 3.0.0-preview1-26907-05 + 3.0.0-alpha1-10742 15.6.1 3.0.1 - 2.2.0-preview3-35425 - 4.7.49 + 3.0.0-alpha1-10742 + 4.10.0 2.0.3 - 4.5.0 + 4.6.0-preview1-26907-04 0.10.0 2.3.1 2.3.1 diff --git a/src/Identity/build/repo.props b/src/Identity/build/repo.props index f1fe24dd27..4402da1d0d 100644 --- a/src/Identity/build/repo.props +++ b/src/Identity/build/repo.props @@ -4,13 +4,10 @@ Internal.AspNetCore.Universe.Lineup - 2.2.0-* https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json - - - + diff --git a/src/Identity/samples/ApiAuthSample/ApiAuthSample.csproj b/src/Identity/samples/ApiAuthSample/ApiAuthSample.csproj index d4dff9d6ae..d6f43b9d64 100644 --- a/src/Identity/samples/ApiAuthSample/ApiAuthSample.csproj +++ b/src/Identity/samples/ApiAuthSample/ApiAuthSample.csproj @@ -1,7 +1,7 @@  - netcoreapp2.2;net461 + netcoreapp3.0 aspnet-ApiAuthSample-12ED8ECC-9EF1-4D31-87B4-1405B3198E5E diff --git a/src/Identity/samples/ApiAuthSample/Startup.cs b/src/Identity/samples/ApiAuthSample/Startup.cs index 6e776cc9cb..478799f2c7 100644 --- a/src/Identity/samples/ApiAuthSample/Startup.cs +++ b/src/Identity/samples/ApiAuthSample/Startup.cs @@ -34,7 +34,7 @@ namespace ApiAuthSample services.AddAuthentication() .AddIdentityServerJwt(); - services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); + services.AddMvc(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/src/Identity/samples/IdentitySample.DefaultUI/IdentitySample.DefaultUI.csproj b/src/Identity/samples/IdentitySample.DefaultUI/IdentitySample.DefaultUI.csproj index f7263323cd..39f6bb9d43 100644 --- a/src/Identity/samples/IdentitySample.DefaultUI/IdentitySample.DefaultUI.csproj +++ b/src/Identity/samples/IdentitySample.DefaultUI/IdentitySample.DefaultUI.csproj @@ -2,7 +2,7 @@ Identity sample MVC application on ASP.NET Core using the default UI - netcoreapp2.2;net461 + netcoreapp3.0 aspnetcore-2ff9bc27-5e8c-4484-90ca-e3aace89b72a diff --git a/src/Identity/samples/IdentitySample.Mvc/IdentitySample.Mvc.csproj b/src/Identity/samples/IdentitySample.Mvc/IdentitySample.Mvc.csproj index 783e3f7a53..8b3e7f604a 100644 --- a/src/Identity/samples/IdentitySample.Mvc/IdentitySample.Mvc.csproj +++ b/src/Identity/samples/IdentitySample.Mvc/IdentitySample.Mvc.csproj @@ -2,7 +2,7 @@ Identity sample MVC application on ASP.NET Core - netcoreapp2.2;net461 + netcoreapp3.0 aspnetcore-b3d20cbe-418e-4bf2-a0f4-57f91d067e07 diff --git a/src/Identity/src/ApiAuth.IS/Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj b/src/Identity/src/ApiAuth.IS/Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj index edbb13fc79..1e0af1cd26 100644 --- a/src/Identity/src/ApiAuth.IS/Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj +++ b/src/Identity/src/ApiAuth.IS/Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj @@ -1,9 +1,7 @@  - - 2.2.0-preview-$(BuildNumber) - netstandard2.0 + netcoreapp3.0 ASP.NET Core API Authorization package powered by Identity Server. true aspnetcore;apiauth;identity diff --git a/src/Identity/src/Core/IdentityBuilder.cs b/src/Identity/src/Core/IdentityBuilder.cs index 905bedc8d0..b7502237bc 100644 --- a/src/Identity/src/Core/IdentityBuilder.cs +++ b/src/Identity/src/Core/IdentityBuilder.cs @@ -127,7 +127,7 @@ namespace Microsoft.AspNetCore.Identity { if (!typeof(IUserTwoFactorTokenProvider<>).MakeGenericType(UserType).GetTypeInfo().IsAssignableFrom(provider.GetTypeInfo())) { - throw new InvalidOperationException(Resources.FormatInvalidManagerType(provider.Name, "IUserTokenProvider", UserType.Name)); + throw new InvalidOperationException(Resources.FormatInvalidManagerType(provider.Name, "IUserTwoFactorTokenProvider", UserType.Name)); } Services.Configure(options => { diff --git a/src/Identity/src/EF/Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj b/src/Identity/src/EF/Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj index 79339b9c1e..69565262fb 100644 --- a/src/Identity/src/EF/Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj +++ b/src/Identity/src/EF/Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj @@ -2,7 +2,7 @@ ASP.NET Core Identity provider that uses Entity Framework Core. - netstandard2.0 + netcoreapp3.0 true aspnetcore;entityframeworkcore;identity;membership diff --git a/src/Identity/src/Identity/Microsoft.AspNetCore.Identity.csproj b/src/Identity/src/Identity/Microsoft.AspNetCore.Identity.csproj index fc0fae70c8..9ef7ddb110 100644 --- a/src/Identity/src/Identity/Microsoft.AspNetCore.Identity.csproj +++ b/src/Identity/src/Identity/Microsoft.AspNetCore.Identity.csproj @@ -2,7 +2,7 @@ ASP.NET Core Identity is the membership system for building ASP.NET Core web applications, including membership, login, and user data. ASP.NET Core Identity allows you to add login features to your application and makes it easy to customize data about the logged in user. - netstandard2.0 + netcoreapp3.0 true aspnetcore;identity;membership diff --git a/src/Identity/src/Specification.Tests/Microsoft.AspNetCore.Identity.Specification.Tests.csproj b/src/Identity/src/Specification.Tests/Microsoft.AspNetCore.Identity.Specification.Tests.csproj index 668159786b..22a7b552f9 100644 --- a/src/Identity/src/Specification.Tests/Microsoft.AspNetCore.Identity.Specification.Tests.csproj +++ b/src/Identity/src/Specification.Tests/Microsoft.AspNetCore.Identity.Specification.Tests.csproj @@ -2,7 +2,7 @@ Shared test suite for Asp.Net Identity Core store implementations. - netstandard2.0 + netcoreapp3.0 true aspnetcore;identity;membership diff --git a/src/Identity/src/UI/Areas/Identity/Pages/V3/Account/Manage/DeletePersonalData.cshtml.cs b/src/Identity/src/UI/Areas/Identity/Pages/V3/Account/Manage/DeletePersonalData.cshtml.cs index 24e5a1a4e8..12796fbf0e 100644 --- a/src/Identity/src/UI/Areas/Identity/Pages/V3/Account/Manage/DeletePersonalData.cshtml.cs +++ b/src/Identity/src/UI/Areas/Identity/Pages/V3/Account/Manage/DeletePersonalData.cshtml.cs @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal var userId = await _userManager.GetUserIdAsync(user); if (!result.Succeeded) { - throw new InvalidOperationException($"Unexpected error occurred deleteing user with ID '{userId}'."); + throw new InvalidOperationException($"Unexpected error occurred deleting user with ID '{userId}'."); } await _signInManager.SignOutAsync(); diff --git a/src/Identity/src/UI/Areas/Identity/Pages/V4/Account/Manage/DeletePersonalData.cshtml.cs b/src/Identity/src/UI/Areas/Identity/Pages/V4/Account/Manage/DeletePersonalData.cshtml.cs index ea67b87a9a..72829f1366 100644 --- a/src/Identity/src/UI/Areas/Identity/Pages/V4/Account/Manage/DeletePersonalData.cshtml.cs +++ b/src/Identity/src/UI/Areas/Identity/Pages/V4/Account/Manage/DeletePersonalData.cshtml.cs @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal var userId = await _userManager.GetUserIdAsync(user); if (!result.Succeeded) { - throw new InvalidOperationException($"Unexpected error occurred deleteing user with ID '{userId}'."); + throw new InvalidOperationException($"Unexpected error occurred deleting user with ID '{userId}'."); } await _signInManager.SignOutAsync(); diff --git a/src/Identity/src/UI/Microsoft.AspNetCore.Identity.UI.csproj b/src/Identity/src/UI/Microsoft.AspNetCore.Identity.UI.csproj index 295d609e80..6f79a1e4bb 100644 --- a/src/Identity/src/UI/Microsoft.AspNetCore.Identity.UI.csproj +++ b/src/Identity/src/UI/Microsoft.AspNetCore.Identity.UI.csproj @@ -3,7 +3,7 @@ ASP.NET Core Identity UI is the default Razor Pages built-in UI for the ASP.NET Core Identity framework. Compiled Razor views assembly for the ASP.NET Core Identity UI package. - netstandard2.0 + netcoreapp3.0 true aspnetcore;identity;membership;razorpages true @@ -12,6 +12,10 @@ false false true + + <_EnableAllInclusiveRazorSdk>true + 3.0 + MVC-3.0 @@ -66,7 +70,7 @@ BuildProjectReferences=false; RazorCompileOnBuild=true; UIFrameworkVersion=%(UIFrameworkVersionMoniker.Identity); - IntermediateOutputPath=$(IntermediateOutputPath)%(UIFrameworkVersionMoniker.Identity)\" /> + IntermediateOutputPath=$(IntermediateOutputPath)%(UIFrameworkVersionMoniker.Identity)\;" /> - netcoreapp2.2 + netcoreapp3.0 $(DeveloperBuildTestTfms) $(StandardTestTfms) - $(StandardTestTfms);net461 diff --git a/src/Identity/test/EF.Test/SqlStoreTestBase.cs b/src/Identity/test/EF.Test/SqlStoreTestBase.cs index 1cc9204267..77932fae4c 100644 --- a/src/Identity/test/EF.Test/SqlStoreTestBase.cs +++ b/src/Identity/test/EF.Test/SqlStoreTestBase.cs @@ -180,7 +180,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test IdentityResultAssert.IsSuccess(await roleMgr.DeleteAsync(role)); Assert.Null(await roleMgr.FindByNameAsync(roleName)); Assert.False(await roleMgr.RoleExistsAsync(roleName)); - // REVIEW: We should throw if deleteing a non empty role? + // REVIEW: We should throw if deleting a non empty role? roles = await userMgr.GetRolesAsync(user); Assert.Empty(roles); diff --git a/src/Identity/test/Identity.FunctionalTests/Microsoft.AspNetCore.Identity.FunctionalTests.csproj b/src/Identity/test/Identity.FunctionalTests/Microsoft.AspNetCore.Identity.FunctionalTests.csproj index 217982f7f9..3c201f9c7b 100644 --- a/src/Identity/test/Identity.FunctionalTests/Microsoft.AspNetCore.Identity.FunctionalTests.csproj +++ b/src/Identity/test/Identity.FunctionalTests/Microsoft.AspNetCore.Identity.FunctionalTests.csproj @@ -1,8 +1,7 @@ - $(StandardTestTfms) - + netcoreapp3.0 @@ -27,7 +26,7 @@ - <_IdentityUIViewsAssemblies Include="$(MSBuildThisFileDirectory)..\..\src\UI\bin\$(Configuration)\netstandard2.0\Microsoft.AspNetCore.Identity.UI.Views.*.dll" /> + <_IdentityUIViewsAssemblies Include="$(MSBuildThisFileDirectory)..\..\src\UI\bin\$(Configuration)\netcoreapp3.0\Microsoft.AspNetCore.Identity.UI.Views.*.dll" /> - $(StandardTestTfms) + netcoreapp3.0 diff --git a/src/Identity/test/Identity.Test/SignInManagerTest.cs b/src/Identity/test/Identity.Test/SignInManagerTest.cs index 316f4b8d0b..cc840112dc 100644 --- a/src/Identity/test/Identity.Test/SignInManagerTest.cs +++ b/src/Identity/test/Identity.Test/SignInManagerTest.cs @@ -10,6 +10,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Moq; using Xunit; @@ -121,9 +123,8 @@ namespace Microsoft.AspNetCore.Identity.Test var options = new Mock>(); options.Setup(a => a.Value).Returns(identityOptions); var claimsFactory = new UserClaimsPrincipalFactory(manager.Object, roleManager.Object, options.Object); - var logStore = new StringBuilder(); - var logger = MockHelpers.MockILogger>(logStore); - var helper = new SignInManager(manager.Object, contextAccessor.Object, claimsFactory, options.Object, logger.Object, new Mock().Object); + var logger = new TestLogger>(); + var helper = new SignInManager(manager.Object, contextAccessor.Object, claimsFactory, options.Object, logger, new Mock().Object); // Act var result = await helper.PasswordSignInAsync(user.UserName, "bogus", false, false); @@ -131,7 +132,7 @@ namespace Microsoft.AspNetCore.Identity.Test // Assert Assert.False(result.Succeeded); Assert.True(result.IsLockedOut); - Assert.Contains($"User {user.Id} is currently locked out.", logStore.ToString()); + Assert.Contains($"User {user.Id} is currently locked out.", logger.LogMessages); manager.Verify(); } @@ -152,9 +153,8 @@ namespace Microsoft.AspNetCore.Identity.Test var options = new Mock>(); options.Setup(a => a.Value).Returns(identityOptions); var claimsFactory = new UserClaimsPrincipalFactory(manager.Object, roleManager.Object, options.Object); - var logStore = new StringBuilder(); - var logger = MockHelpers.MockILogger>(logStore); - var helper = new SignInManager(manager.Object, contextAccessor.Object, claimsFactory, options.Object, logger.Object, new Mock().Object); + var logger = new TestLogger>(); + var helper = new SignInManager(manager.Object, contextAccessor.Object, claimsFactory, options.Object, logger, new Mock().Object); // Act var result = await helper.CheckPasswordSignInAsync(user, "bogus", false); @@ -162,7 +162,7 @@ namespace Microsoft.AspNetCore.Identity.Test // Assert Assert.False(result.Succeeded); Assert.True(result.IsLockedOut); - Assert.Contains($"User {user.Id} is currently locked out.", logStore.ToString()); + Assert.Contains($"User {user.Id} is currently locked out.", logger.LogMessages); manager.Verify(); } @@ -176,7 +176,7 @@ namespace Microsoft.AspNetCore.Identity.Test return manager; } - private static SignInManager SetupSignInManager(UserManager manager, HttpContext context, StringBuilder logStore = null, IdentityOptions identityOptions = null, IAuthenticationSchemeProvider schemeProvider = null) + private static SignInManager SetupSignInManager(UserManager manager, HttpContext context, ILogger logger = null, IdentityOptions identityOptions = null, IAuthenticationSchemeProvider schemeProvider = null) { var contextAccessor = new Mock(); contextAccessor.Setup(a => a.HttpContext).Returns(context); @@ -187,7 +187,7 @@ namespace Microsoft.AspNetCore.Identity.Test var claimsFactory = new UserClaimsPrincipalFactory(manager, roleManager.Object, options.Object); schemeProvider = schemeProvider ?? new Mock().Object; var sm = new SignInManager(manager, contextAccessor.Object, claimsFactory, options.Object, null, schemeProvider); - sm.Logger = MockHelpers.MockILogger>(logStore ?? new StringBuilder()).Object; + sm.Logger = logger ?? NullLogger>.Instance; return sm; } @@ -759,8 +759,9 @@ namespace Microsoft.AspNetCore.Identity.Test manager.Setup(m => m.IsLockedOutAsync(user)).ReturnsAsync(false).Verifiable(); manager.Setup(m => m.CheckPasswordAsync(user, "bogus")).ReturnsAsync(false).Verifiable(); var context = new Mock(); - var logStore = new StringBuilder(); - var helper = SetupSignInManager(manager.Object, context.Object, logStore); + var logger = new TestLogger>(); + var helper = SetupSignInManager(manager.Object, context.Object, logger); + // Act var result = await helper.PasswordSignInAsync(user.UserName, "bogus", false, false); var checkResult = await helper.CheckPasswordSignInAsync(user, "bogus", false); @@ -768,7 +769,7 @@ namespace Microsoft.AspNetCore.Identity.Test // Assert Assert.False(result.Succeeded); Assert.False(checkResult.Succeeded); - Assert.Contains($"User {user.Id} failed to provide the correct password.", logStore.ToString()); + Assert.Contains($"User {user.Id} failed to provide the correct password.", logger.LogMessages); manager.Verify(); context.Verify(); } @@ -867,8 +868,8 @@ namespace Microsoft.AspNetCore.Identity.Test } var identityOptions = new IdentityOptions(); identityOptions.SignIn.RequireConfirmedEmail = true; - var logStore = new StringBuilder(); - var helper = SetupSignInManager(manager.Object, context, logStore, identityOptions); + var logger = new TestLogger>(); + var helper = SetupSignInManager(manager.Object, context, logger, identityOptions); // Act var result = await helper.PasswordSignInAsync(user, "password", false, false); @@ -877,7 +878,16 @@ namespace Microsoft.AspNetCore.Identity.Test Assert.Equal(confirmed, result.Succeeded); Assert.NotEqual(confirmed, result.IsNotAllowed); - Assert.Equal(confirmed, !logStore.ToString().Contains($"User {user.Id} cannot sign in without a confirmed email.")); + + var message = $"User {user.Id} cannot sign in without a confirmed email."; + if (!confirmed) + { + Assert.Contains(message, logger.LogMessages); + } + else + { + Assert.DoesNotContain(message, logger.LogMessages); + } manager.Verify(); auth.Verify(); @@ -912,8 +922,8 @@ namespace Microsoft.AspNetCore.Identity.Test var identityOptions = new IdentityOptions(); identityOptions.SignIn.RequireConfirmedPhoneNumber = true; - var logStore = new StringBuilder(); - var helper = SetupSignInManager(manager.Object, context, logStore, identityOptions); + var logger = new TestLogger>(); + var helper = SetupSignInManager(manager.Object, context, logger, identityOptions); // Act var result = await helper.PasswordSignInAsync(user, "password", false, false); @@ -921,7 +931,17 @@ namespace Microsoft.AspNetCore.Identity.Test // Assert Assert.Equal(confirmed, result.Succeeded); Assert.NotEqual(confirmed, result.IsNotAllowed); - Assert.Equal(confirmed, !logStore.ToString().Contains($"User {user.Id} cannot sign in without a confirmed phone number.")); + + var message = $"User {user.Id} cannot sign in without a confirmed phone number."; + if (!confirmed) + { + Assert.Contains(message, logger.LogMessages); + } + else + { + Assert.DoesNotContain(message, logger.LogMessages); + } + manager.Verify(); auth.Verify(); } diff --git a/src/Identity/test/Shared/MockHelpers.cs b/src/Identity/test/Shared/MockHelpers.cs index bb6c98699e..c476e52044 100644 --- a/src/Identity/test/Shared/MockHelpers.cs +++ b/src/Identity/test/Shared/MockHelpers.cs @@ -34,35 +34,6 @@ namespace Microsoft.AspNetCore.Identity.Test new IdentityErrorDescriber(), null); } - public static Mock> MockILogger(StringBuilder logStore = null) where T : class - { - logStore = logStore ?? LogMessage; - var logger = new Mock>(); - logger.Setup(x => x.Log(It.IsAny(), It.IsAny(), It.IsAny(), - It.IsAny(), It.IsAny>())) - .Callback((LogLevel logLevel, EventId eventId, object state, Exception exception, Func formatter) => - { - if (formatter == null) - { - logStore.Append(state.ToString()); - } - else - { - logStore.Append(formatter(state, exception)); - } - logStore.Append(" "); - }); - logger.Setup(x => x.BeginScope(It.IsAny())).Callback((object state) => - { - logStore.Append(state.ToString()); - logStore.Append(" "); - }); - logger.Setup(x => x.IsEnabled(LogLevel.Debug)).Returns(true); - logger.Setup(x => x.IsEnabled(LogLevel.Warning)).Returns(true); - - return logger; - } - public static UserManager TestUserManager(IUserStore store = null) where TUser : class { store = store ?? new Mock>().Object; diff --git a/src/Identity/test/WebSites/Directory.Build.props b/src/Identity/test/WebSites/Directory.Build.props index c2bab8572a..c8a4ec4440 100644 --- a/src/Identity/test/WebSites/Directory.Build.props +++ b/src/Identity/test/WebSites/Directory.Build.props @@ -1,11 +1,4 @@ - - - netcoreapp2.2 - $(DeveloperBuildTestWebsiteTfms) - $(StandardTestWebsiteTfms) - $(StandardTestWebsiteTfms);net461 - diff --git a/src/Identity/test/WebSites/Identity.DefaultUI.WebSite/Identity.DefaultUI.WebSite.csproj b/src/Identity/test/WebSites/Identity.DefaultUI.WebSite/Identity.DefaultUI.WebSite.csproj index ff9afd8729..17fa5548f4 100644 --- a/src/Identity/test/WebSites/Identity.DefaultUI.WebSite/Identity.DefaultUI.WebSite.csproj +++ b/src/Identity/test/WebSites/Identity.DefaultUI.WebSite/Identity.DefaultUI.WebSite.csproj @@ -1,7 +1,7 @@  - $(StandardTestWebsiteTfms) + netcoreapp3.0 aspnet-Identity.DefaultUI.WebSite-80C658D8-CED7-467F-9B47-75DA3BC1A16D @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/src/Identity/test/WebSites/Identity.DefaultUI.WebSite/StartupBase.cs b/src/Identity/test/WebSites/Identity.DefaultUI.WebSite/StartupBase.cs index 35a94b3b72..fb08f9741b 100644 --- a/src/Identity/test/WebSites/Identity.DefaultUI.WebSite/StartupBase.cs +++ b/src/Identity/test/WebSites/Identity.DefaultUI.WebSite/StartupBase.cs @@ -45,14 +45,7 @@ namespace Identity.DefaultUI.WebSite .AddRoles() .AddEntityFrameworkStores(); - services.AddMvc() - .AddRazorOptions(ro => - { - // We do this to avoid file descriptor exhaustion in our functional tests - // due to Razor Pages using a file watcher. - ro.FileProviders.Clear(); - ro.FileProviders.Add(new CompositeFileProvider(new[] { new NullFileProvider() })); - }); + services.AddMvc(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/src/Identity/version.props b/src/Identity/version.props index beed3973b3..03bcf51212 100644 --- a/src/Identity/version.props +++ b/src/Identity/version.props @@ -1,16 +1,15 @@ - 2.2.0 - rtm + 3.0.0 + alpha1 $(VersionPrefix) $(VersionPrefix)-$(VersionSuffix)-final t000 a- $(FeatureBranchVersionPrefix)$(VersionSuffix)-$([System.Text.RegularExpressions.Regex]::Replace('$(FeatureBranchVersionSuffix)', '[^\w-]', '-')) $(VersionSuffix)-$(BuildNumber) - - 0.5.0 - rtm + 0.6.0 + alpha1 $(ExperimentalVersionPrefix) $(ExperimentalVersionPrefix)-$(ExperimentalVersionSuffix)-final $(ExperimentalVersionSuffix)-$(BuildNumber)