8
8
using Microsoft . AspNetCore . Hosting ;
9
9
using Microsoft . AspNetCore . Localization ;
10
10
using Microsoft . AspNetCore . TestHost ;
11
+ using Microsoft . Extensions . DependencyInjection ;
12
+ using Microsoft . Extensions . Logging ;
13
+ using Microsoft . Extensions . Logging . Testing ;
11
14
using Microsoft . Net . Http . Headers ;
12
15
using Xunit ;
13
16
@@ -33,8 +36,10 @@ public async Task GetCultureInfoFromPersistentCookie()
33
36
new CultureInfo ( "ar-SA" )
34
37
}
35
38
} ;
36
- var provider = new CookieRequestCultureProvider ( ) ;
37
- provider . CookieName = "Preferences" ;
39
+ var provider = new CookieRequestCultureProvider
40
+ {
41
+ CookieName = "Preferences"
42
+ } ;
38
43
options . RequestCultureProviders . Insert ( 0 , provider ) ;
39
44
40
45
app . UseRequestLocalization ( options ) ;
@@ -77,8 +82,10 @@ public async Task GetDefaultCultureInfoIfCultureKeysAreMissingOrInvalid()
77
82
new CultureInfo ( "ar-SA" )
78
83
}
79
84
} ;
80
- var provider = new CookieRequestCultureProvider ( ) ;
81
- provider . CookieName = "Preferences" ;
85
+ var provider = new CookieRequestCultureProvider
86
+ {
87
+ CookieName = "Preferences"
88
+ } ;
82
89
options . RequestCultureProviders . Insert ( 0 , provider ) ;
83
90
app . UseRequestLocalization ( options ) ;
84
91
app . Run ( context =>
@@ -117,24 +124,87 @@ public async Task GetDefaultCultureInfoIfCookieDoesNotExist()
117
124
new CultureInfo ( "ar-SA" )
118
125
}
119
126
} ;
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
+ } ;
122
177
options . RequestCultureProviders . Insert ( 0 , provider ) ;
123
178
app . UseRequestLocalization ( options ) ;
124
179
app . Run ( context =>
125
180
{
126
181
var requestCultureFeature = context . Features . Get < IRequestCultureFeature > ( ) ;
127
182
var requestCulture = requestCultureFeature . RequestCulture ;
128
183
Assert . Equal ( "en-US" , requestCulture . Culture . Name ) ;
184
+ Assert . NotNull ( context . RequestServices . GetService < ILogger < RequestLocalizationMiddleware > > ( ) ) ;
129
185
return Task . FromResult ( 0 ) ;
130
186
} ) ;
187
+ } )
188
+ . ConfigureServices ( services =>
189
+ {
190
+ services . AddSingleton ( typeof ( ILoggerFactory ) , loggerFactory ) ;
131
191
} ) ;
132
192
133
193
using ( var server = new TestServer ( builder ) )
134
194
{
135
195
var client = server . CreateClient ( ) ;
196
+ client . DefaultRequestHeaders . Add ( "Cookie" , new CookieHeaderValue ( "Preferences" , $ "c={ culture } |uic={ uiCulture } ") . ToString ( ) ) ;
197
+
136
198
var response = await client . GetAsync ( string . Empty ) ;
199
+ response . EnsureSuccessStatusCode ( ) ;
137
200
}
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 ( ) ) ;
138
208
}
139
209
}
140
210
}
0 commit comments