Skip to content

Commit 9a5cef7

Browse files
committed
[#246] [add] impl
1 parent d533b0d commit 9a5cef7

File tree

5 files changed

+85
-23
lines changed

5 files changed

+85
-23
lines changed

src/Simplify.Web.Tests/Modules/LanguageManagerTests.cs

+52-12
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ public void Initialize()
2323
{
2424
_settings = new Mock<ISimplifyWebSettings>();
2525
_context = new Mock<HttpContext>();
26+
_responseCookies = new Mock<IResponseCookies>();
2627

2728
_settings.SetupGet(x => x.DefaultLanguage).Returns("en");
28-
_responseCookies = new Mock<IResponseCookies>();
2929

3030
_context.SetupGet(x => x.Request.Cookies).Returns(Mock.Of<IRequestCookieCollection>());
3131
_context.SetupGet(x => x.Response.Cookies).Returns(_responseCookies.Object);
@@ -34,23 +34,29 @@ public void Initialize()
3434
}
3535

3636
[Test]
37-
public void Constructor_NoRequestCookieLanguage_DefaultLanguageSet()
37+
public void Constructor_NoRequestCookieLanguageAndCookieLanguageIsEnabled_DefaultLanguageSet()
3838
{
39+
// Arrange
40+
_settings.SetupGet(x => x.AcceptCookieLanguage).Returns(true);
41+
3942
// Assert
4043
Assert.AreEqual("en", _languageManager.Language);
4144
}
4245

4346
[Test]
44-
public void Constructor_HaveRequestCookie_CurrentLanguageSet()
47+
public void Constructor_HaveRequestCookieLanguageAndCookieLanguageIsEnabled_CurrentLanguageSet()
4548
{
4649
// Assign
4750

4851
var cookieCollection = new Mock<IRequestCookieCollection>();
52+
4953
cookieCollection.SetupGet(x => x[It.Is<string>(s => s == LanguageManager.CookieLanguageFieldName)]).Returns("ru");
50-
_context.SetupGet(x => x.Request.Cookies).Returns(cookieCollection.Object);
5154

55+
_settings.SetupGet(x => x.AcceptCookieLanguage).Returns(true);
5256
_settings.SetupGet(x => x.DefaultLanguage).Returns("en");
5357

58+
_context.SetupGet(x => x.Request.Cookies).Returns(cookieCollection.Object);
59+
5460
// Act
5561
_languageManager = new LanguageManager(_settings.Object, _context.Object);
5662

@@ -70,9 +76,10 @@ public void SetCookieLanguage_CorrectLanguage_CorrectCookieCreated()
7076
{
7177
// Assign
7278

73-
_settings.SetupGet(x => x.DefaultLanguage).Returns("en");
7479
_languageManager = new LanguageManager(_settings.Object, _context.Object);
7580

81+
_settings.SetupGet(x => x.DefaultLanguage).Returns("en");
82+
7683
_responseCookies.Setup(x => x.Append(It.IsAny<string>(), It.IsAny<string>())).Callback<string, string>((key, value) =>
7784
{
7885
Assert.AreEqual("Set-Cookie", key);
@@ -88,9 +95,11 @@ public void Constructor_HaveHeaderLanguageAndSettingIsEnabledCase1_LanguageSetFr
8895
{
8996
// Assign
9097

91-
_settings.SetupGet(x => x.AcceptHeaderLanguage).Returns(true);
9298
var header = new HeaderDictionary(new Dictionary<string, StringValues>());
99+
93100
header.Append("Accept-Language", "ru-RU");
101+
102+
_settings.SetupGet(x => x.AcceptHeaderLanguage).Returns(true);
94103
_context.SetupGet(x => x.Request.Headers).Returns(header);
95104

96105
// Act
@@ -105,9 +114,11 @@ public void Constructor_HaveHeaderLanguageAndSettingIsEnabledCase2_LanguageSetFr
105114
{
106115
// Assign
107116

108-
_settings.SetupGet(x => x.AcceptHeaderLanguage).Returns(true);
109117
var header = new HeaderDictionary(new Dictionary<string, StringValues>());
118+
110119
header.Append("Accept-Language", "ru-RU;q=0.5");
120+
121+
_settings.SetupGet(x => x.AcceptHeaderLanguage).Returns(true);
111122
_context.SetupGet(x => x.Request.Headers).Returns(header);
112123

113124
// Act
@@ -118,17 +129,21 @@ public void Constructor_HaveHeaderLanguageAndSettingIsEnabledCase2_LanguageSetFr
118129
}
119130

120131
[Test]
121-
public void Constructor_HaveHeaderLanguageAndCookieLanguage_LanguageSetFromCookie()
132+
public void Constructor_HaveHeaderLanguageAndCookieLanguageAndCookieLanguageIsEnabled_LanguageSetFromCookie()
122133
{
123134
// Assign
124135

125136
var cookieCollection = new Mock<IRequestCookieCollection>();
137+
var header = new HeaderDictionary(new Dictionary<string, StringValues>());
138+
139+
header.Append("Accept-Language", "ru-RU");
140+
126141
cookieCollection.SetupGet(x => x[It.Is<string>(s => s == LanguageManager.CookieLanguageFieldName)]).Returns("fr");
127-
_context.SetupGet(x => x.Request.Cookies).Returns(cookieCollection.Object);
128142

143+
_settings.SetupGet(x => x.AcceptCookieLanguage).Returns(true);
129144
_settings.SetupGet(x => x.AcceptHeaderLanguage).Returns(true);
130-
var header = new HeaderDictionary(new Dictionary<string, StringValues>());
131-
header.Append("Accept-Language", "ru-RU");
145+
146+
_context.SetupGet(x => x.Request.Cookies).Returns(cookieCollection.Object);
132147
_context.SetupGet(x => x.Request.Headers).Returns(header);
133148

134149
// Act
@@ -139,12 +154,37 @@ public void Constructor_HaveHeaderLanguageAndCookieLanguage_LanguageSetFromCooki
139154
}
140155

141156
[Test]
142-
public void Constructor_NoBrowserLanguage_DefaultLanguageSet()
157+
public void Constructor_HaveHeaderLanguageAndCookieLanguageAndCookieLanguageIsDisabled_LanguageSetFromHeader()
143158
{
144159
// Assign
145160

161+
var cookieCollection = new Mock<IRequestCookieCollection>();
162+
var header = new HeaderDictionary(new Dictionary<string, StringValues>());
163+
164+
header.Append("Accept-Language", "ru-RU");
165+
166+
cookieCollection.SetupGet(x => x[It.Is<string>(s => s == LanguageManager.CookieLanguageFieldName)]).Returns("fr");
167+
146168
_settings.SetupGet(x => x.AcceptHeaderLanguage).Returns(true);
169+
170+
_context.SetupGet(x => x.Request.Cookies).Returns(cookieCollection.Object);
171+
_context.SetupGet(x => x.Request.Headers).Returns(header);
172+
173+
// Act
174+
_languageManager = new LanguageManager(_settings.Object, _context.Object);
175+
176+
// Assert
177+
Assert.AreEqual("ru", _languageManager.Language);
178+
}
179+
180+
[Test]
181+
public void Constructor_NoHeaderLanguage_DefaultLanguageSet()
182+
{
183+
// Assign
184+
147185
var header = new HeaderDictionary(new Dictionary<string, StringValues>());
186+
187+
_settings.SetupGet(x => x.AcceptHeaderLanguage).Returns(true);
148188
_context.SetupGet(x => x.Request.Headers).Returns(header);
149189

150190
// Act

src/Simplify.Web/Modules/LanguageManager.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public LanguageManager(ISimplifyWebSettings settings, HttpContext context)
2727
{
2828
_responseCookies = context.Response.Cookies;
2929

30-
if (TrySetLanguageFromCookie(context))
30+
if (settings.AcceptCookieLanguage && TrySetLanguageFromCookie(context))
3131
return;
3232

3333
if (!settings.AcceptHeaderLanguage || (settings.AcceptHeaderLanguage && !TrySetLanguageFromRequestHeader(context)))

src/Simplify.Web/Modules/LanguageManagerProvider.cs

+6-8
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,15 @@ namespace Simplify.Web.Modules;
66
/// <summary>
77
/// Provides language manager provider
88
/// </summary>
9-
public class LanguageManagerProvider : ILanguageManagerProvider
9+
/// <remarks>
10+
/// Initializes a new instance of the <see cref="LanguageManagerProvider" /> class.
11+
/// </remarks>
12+
/// <param name="settings">The settings.</param>
13+
public class LanguageManagerProvider(ISimplifyWebSettings settings) : ILanguageManagerProvider
1014
{
11-
private readonly ISimplifyWebSettings _settings;
15+
private readonly ISimplifyWebSettings _settings = settings;
1216
private ILanguageManager? _languageManager;
1317

14-
/// <summary>
15-
/// Initializes a new instance of the <see cref="LanguageManagerProvider" /> class.
16-
/// </summary>
17-
/// <param name="settings">The settings.</param>
18-
public LanguageManagerProvider(ISimplifyWebSettings settings) => _settings = settings;
19-
2018
/// <summary>
2119
/// Creates the language manager instance.
2220
/// </summary>

src/Simplify.Web/Settings/ISimplifyWebSettings.cs

+8
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ public interface ISimplifyWebSettings
1212
/// </summary>
1313
string DefaultLanguage { get; }
1414

15+
/// <summary>
16+
/// Gets a value indicating whether cookie language should be accepted
17+
/// </summary>
18+
/// <value>
19+
/// <c>true</c> if cookie language should be accepted; otherwise, <c>false</c>.
20+
/// </value>
21+
bool AcceptCookieLanguage { get; }
22+
1523
/// <summary>
1624
/// Gets a value indicating whether HTTP header language should be accepted
1725
/// </summary>

src/Simplify.Web/Settings/SimplifyWebSettings.cs

+18-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public sealed class SimplifyWebSettings : ISimplifyWebSettings
1616
/// </summary>
1717
public SimplifyWebSettings(IConfiguration configuration)
1818
{
19-
var config = configuration.GetSection("SimplifyWebSettings");
19+
var config = configuration.GetSection(nameof(SimplifyWebSettings));
2020

2121
if (!config.GetChildren().Any())
2222
return;
@@ -37,6 +37,14 @@ public SimplifyWebSettings(IConfiguration configuration)
3737
/// </summary>
3838
public string DefaultLanguage { get; private set; } = "en";
3939

40+
/// <summary>
41+
/// Gets a value indicating whether cookie language should be accepted
42+
/// </summary>
43+
/// <value>
44+
/// <c>true</c> if cookie language should be accepted; otherwise, <c>false</c>.
45+
/// </value>
46+
public bool AcceptCookieLanguage { get; private set; }
47+
4048
/// <summary>
4149
/// Gets a value indicating whether HTTP header language should be accepted
4250
/// </summary>
@@ -166,12 +174,20 @@ private void LoadLanguageManagerSettings(IConfiguration config)
166174
if (!string.IsNullOrEmpty(defaultLanguage))
167175
DefaultLanguage = defaultLanguage;
168176

177+
var acceptCookieLanguage = config[nameof(AcceptCookieLanguage)];
178+
179+
bool buffer;
180+
181+
if (!string.IsNullOrEmpty(acceptCookieLanguage))
182+
if (bool.TryParse(acceptCookieLanguage, out buffer))
183+
AcceptCookieLanguage = buffer;
184+
169185
var acceptHeaderLanguage = config[nameof(AcceptHeaderLanguage)];
170186

171187
if (string.IsNullOrEmpty(acceptHeaderLanguage))
172188
return;
173189

174-
if (bool.TryParse(acceptHeaderLanguage, out var buffer))
190+
if (bool.TryParse(acceptHeaderLanguage, out buffer))
175191
AcceptHeaderLanguage = buffer;
176192
}
177193

0 commit comments

Comments
 (0)