Skip to content

Commit 9d0ad91

Browse files
committed
Add unit tests for #372 fix
1 parent 41ae205 commit 9d0ad91

File tree

2 files changed

+78
-6
lines changed

2 files changed

+78
-6
lines changed

test/Microsoft.AspNetCore.Localization.Tests/CookieRequestCultureProviderTest.cs

Lines changed: 76 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
using Microsoft.AspNetCore.Hosting;
99
using Microsoft.AspNetCore.Localization;
1010
using Microsoft.AspNetCore.TestHost;
11+
using Microsoft.Extensions.DependencyInjection;
12+
using Microsoft.Extensions.Logging;
13+
using Microsoft.Extensions.Logging.Testing;
1114
using Microsoft.Net.Http.Headers;
1215
using Xunit;
1316

@@ -33,8 +36,10 @@ public async Task GetCultureInfoFromPersistentCookie()
3336
new CultureInfo("ar-SA")
3437
}
3538
};
36-
var provider = new CookieRequestCultureProvider();
37-
provider.CookieName = "Preferences";
39+
var provider = new CookieRequestCultureProvider
40+
{
41+
CookieName = "Preferences"
42+
};
3843
options.RequestCultureProviders.Insert(0, provider);
3944

4045
app.UseRequestLocalization(options);
@@ -77,8 +82,10 @@ public async Task GetDefaultCultureInfoIfCultureKeysAreMissingOrInvalid()
7782
new CultureInfo("ar-SA")
7883
}
7984
};
80-
var provider = new CookieRequestCultureProvider();
81-
provider.CookieName = "Preferences";
85+
var provider = new CookieRequestCultureProvider
86+
{
87+
CookieName = "Preferences"
88+
};
8289
options.RequestCultureProviders.Insert(0, provider);
8390
app.UseRequestLocalization(options);
8491
app.Run(context =>
@@ -117,24 +124,87 @@ public async Task GetDefaultCultureInfoIfCookieDoesNotExist()
117124
new CultureInfo("ar-SA")
118125
}
119126
};
120-
var provider = new CookieRequestCultureProvider();
121-
provider.CookieName = "Preferences";
127+
var provider = new CookieRequestCultureProvider
128+
{
129+
CookieName = "Preferences"
130+
};
131+
options.RequestCultureProviders.Insert(0, provider);
132+
app.UseRequestLocalization(options);
133+
app.Run(context =>
134+
{
135+
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
136+
var requestCulture = requestCultureFeature.RequestCulture;
137+
Assert.Equal("en-US", requestCulture.Culture.Name);
138+
return Task.FromResult(0);
139+
});
140+
});
141+
142+
using (var server = new TestServer(builder))
143+
{
144+
var client = server.CreateClient();
145+
var response = await client.GetAsync(string.Empty);
146+
}
147+
}
148+
149+
[Theory]
150+
[InlineData("??", "en-US", "CookieRequestCultureProvider returned the following unsupported cultures '??'.")]
151+
[InlineData("en-US", "??", "CookieRequestCultureProvider returned the following unsupported cultures '??'.")]
152+
public async Task UnsupportedCulturesShouldLogWarning(string culture, string uiCulture, string expectedMessage)
153+
{
154+
var sink = new TestSink(
155+
TestSink.EnableWithTypeName<CookieRequestCultureProvider>,
156+
TestSink.EnableWithTypeName<CookieRequestCultureProvider>);
157+
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
158+
var builder = new WebHostBuilder()
159+
.Configure(app =>
160+
{
161+
var options = new RequestLocalizationOptions
162+
{
163+
DefaultRequestCulture = new RequestCulture("en-US"),
164+
SupportedCultures = new List<CultureInfo>
165+
{
166+
new CultureInfo("ar-YE")
167+
},
168+
SupportedUICultures = new List<CultureInfo>
169+
{
170+
new CultureInfo("ar-YE")
171+
}
172+
};
173+
var provider = new CookieRequestCultureProvider
174+
{
175+
CookieName = "Preferences"
176+
};
122177
options.RequestCultureProviders.Insert(0, provider);
123178
app.UseRequestLocalization(options);
124179
app.Run(context =>
125180
{
126181
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
127182
var requestCulture = requestCultureFeature.RequestCulture;
128183
Assert.Equal("en-US", requestCulture.Culture.Name);
184+
Assert.NotNull(context.RequestServices.GetService<ILogger<RequestLocalizationMiddleware>>());
129185
return Task.FromResult(0);
130186
});
187+
})
188+
.ConfigureServices(services =>
189+
{
190+
services.AddSingleton(typeof(ILoggerFactory), loggerFactory);
131191
});
132192

133193
using (var server = new TestServer(builder))
134194
{
135195
var client = server.CreateClient();
196+
client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue("Preferences", $"c={culture}|uic={uiCulture}").ToString());
197+
136198
var response = await client.GetAsync(string.Empty);
199+
response.EnsureSuccessStatusCode();
137200
}
201+
202+
var logMessages = sink.Writes;
203+
var count = logMessages.Count;
204+
205+
Assert.Equal(1, count);
206+
Assert.Equal(LogLevel.Warning, logMessages[0].LogLevel);
207+
Assert.Equal(expectedMessage, logMessages[0].State.ToString());
138208
}
139209
}
140210
}

test/Microsoft.AspNetCore.Localization.Tests/Microsoft.AspNetCore.Localization.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111

1212
<ItemGroup>
1313
<PackageReference Include="Microsoft.AspNetCore.TestHost" />
14+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="$(AspNetCoreVersion)" />
1415
<PackageReference Include="Microsoft.Extensions.Logging" />
16+
<PackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(AspNetCoreVersion)" />
1517
<PackageReference Include="Microsoft.NET.Test.Sdk" />
1618
<PackageReference Include="xunit" />
1719
<PackageReference Include="xunit.runner.visualstudio" />

0 commit comments

Comments
 (0)