diff --git a/src/Microsoft.AspNetCore.Localization/RequestCultureProviderLoggerExtensions.cs b/src/Microsoft.AspNetCore.Localization/Internal/RequestCultureProviderLoggerExtensions.cs similarity index 94% rename from src/Microsoft.AspNetCore.Localization/RequestCultureProviderLoggerExtensions.cs rename to src/Microsoft.AspNetCore.Localization/Internal/RequestCultureProviderLoggerExtensions.cs index d7d6821a7b..ee435cda69 100644 --- a/src/Microsoft.AspNetCore.Localization/RequestCultureProviderLoggerExtensions.cs +++ b/src/Microsoft.AspNetCore.Localization/Internal/RequestCultureProviderLoggerExtensions.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Primitives; -namespace Microsoft.AspNetCore.Localization +namespace Microsoft.AspNetCore.Localization.Internal { internal static class RequestCultureProviderLoggerExtensions { @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Localization _unsupportedUICulture = LoggerMessage.Define>( LogLevel.Warning, 2, - "{requestCultureProvider} returned the following unsupported cultures '{cultures}'."); + "{requestCultureProvider} returned the following unsupported UI Cultures '{uiCultures}'."); } public static void UnsupportedCultures(this ILogger logger, string requestCultureProvider, IList cultures) diff --git a/src/Microsoft.AspNetCore.Localization/RequestLocalizationMiddleware.cs b/src/Microsoft.AspNetCore.Localization/RequestLocalizationMiddleware.cs index b186a7693c..7c2462a4b7 100644 --- a/src/Microsoft.AspNetCore.Localization/RequestLocalizationMiddleware.cs +++ b/src/Microsoft.AspNetCore.Localization/RequestLocalizationMiddleware.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Localization.Internal; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -98,7 +99,7 @@ namespace Microsoft.AspNetCore.Localization if (uiCultureInfo == null) { EnsureLogger(context); - _logger?.UnsupportedCultures(provider.GetType().Name, uiCultures); + _logger?.UnsupportedUICultures(provider.GetType().Name, uiCultures); } } diff --git a/test/Microsoft.AspNetCore.Localization.Tests/CookieRequestCultureProviderTest.cs b/test/Microsoft.AspNetCore.Localization.Tests/CookieRequestCultureProviderTest.cs index f74ea77cf8..eb68dad76e 100644 --- a/test/Microsoft.AspNetCore.Localization.Tests/CookieRequestCultureProviderTest.cs +++ b/test/Microsoft.AspNetCore.Localization.Tests/CookieRequestCultureProviderTest.cs @@ -146,14 +146,12 @@ namespace Microsoft.Extensions.Localization } } - [Theory] - [InlineData("??", "en-US", "CookieRequestCultureProvider returned the following unsupported cultures '??'.")] - [InlineData("en-US", "??", "CookieRequestCultureProvider returned the following unsupported cultures '??'.")] - public async Task UnsupportedCulturesShouldLogWarning(string culture, string uiCulture, string expectedMessage) + [Fact] + public async Task RequestLocalizationMiddleware_LogsWarningsForUnsupportedCultures() { var sink = new TestSink( - TestSink.EnableWithTypeName, - TestSink.EnableWithTypeName); + TestSink.EnableWithTypeName, + TestSink.EnableWithTypeName); var loggerFactory = new TestLoggerFactory(sink, enabled: true); var builder = new WebHostBuilder() .Configure(app => @@ -176,14 +174,7 @@ namespace Microsoft.Extensions.Localization }; options.RequestCultureProviders.Insert(0, provider); app.UseRequestLocalization(options); - app.Run(context => - { - var requestCultureFeature = context.Features.Get(); - var requestCulture = requestCultureFeature.RequestCulture; - Assert.Equal("en-US", requestCulture.Culture.Name); - Assert.NotNull(context.RequestServices.GetService>()); - return Task.FromResult(0); - }); + app.Run(context => Task.CompletedTask); }) .ConfigureServices(services => { @@ -193,12 +184,70 @@ namespace Microsoft.Extensions.Localization using (var server = new TestServer(builder)) { var client = server.CreateClient(); + var culture = "??"; + var uiCulture = "ar-YE"; client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue("Preferences", $"c={culture}|uic={uiCulture}").ToString()); var response = await client.GetAsync(string.Empty); response.EnsureSuccessStatusCode(); } + var expectedMessage = $"{nameof(CookieRequestCultureProvider)} returned the following unsupported cultures '??'."; + var logMessages = sink.Writes; + var count = logMessages.Count; + + Assert.Equal(1, count); + Assert.Equal(LogLevel.Warning, logMessages[0].LogLevel); + Assert.Equal(expectedMessage, logMessages[0].State.ToString()); + } + + [Fact] + public async Task RequestLocalizationMiddleware_LogsWarningsForUnsupportedUICultures() + { + var sink = new TestSink( + TestSink.EnableWithTypeName, + TestSink.EnableWithTypeName); + var loggerFactory = new TestLoggerFactory(sink, enabled: true); + var builder = new WebHostBuilder() + .Configure(app => + { + var options = new RequestLocalizationOptions + { + DefaultRequestCulture = new RequestCulture("en-US"), + SupportedCultures = new List + { + new CultureInfo("ar-YE") + }, + SupportedUICultures = new List + { + new CultureInfo("ar-YE") + } + }; + var provider = new CookieRequestCultureProvider + { + CookieName = "Preferences" + }; + options.RequestCultureProviders.Insert(0, provider); + app.UseRequestLocalization(options); + app.Run(context => Task.CompletedTask); + }) + .ConfigureServices(services => + { + services.AddSingleton(typeof(ILoggerFactory), loggerFactory); + }); + + using (var server = new TestServer(builder)) + { + var client = server.CreateClient(); + var culture = "ar-YE"; + var uiCulture = "??"; + client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue("Preferences", $"c={culture}|uic={uiCulture}").ToString()); + + var response = await client.GetAsync(string.Empty); + response.EnsureSuccessStatusCode(); + } + + var expectedMessage = $"{nameof(CookieRequestCultureProvider)} returned the following unsupported UI Cultures '??'."; var logMessages = sink.Writes; var count = logMessages.Count; diff --git a/test/Microsoft.AspNetCore.Localization.Tests/Microsoft.AspNetCore.Localization.Tests.csproj b/test/Microsoft.AspNetCore.Localization.Tests/Microsoft.AspNetCore.Localization.Tests.csproj index 6f61780042..f58033bd9e 100644 --- a/test/Microsoft.AspNetCore.Localization.Tests/Microsoft.AspNetCore.Localization.Tests.csproj +++ b/test/Microsoft.AspNetCore.Localization.Tests/Microsoft.AspNetCore.Localization.Tests.csproj @@ -11,9 +11,9 @@ - + - +