feat(i18n): persist Bokmal preference globally
This commit is contained in:
@@ -426,6 +426,35 @@ public sealed class AuthAndSystemControllerTests
|
||||
Assert.Equal("Ada L.", user.DisplayName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Language_preference_normalizes_and_persists_norwegian_bokmal()
|
||||
{
|
||||
var user = new ApplicationUser { Id = "user-1", UiLanguage = "en" };
|
||||
var users = CreateUserManager();
|
||||
users.Setup(x => x.GetUserAsync(It.IsAny<System.Security.Claims.ClaimsPrincipal>())).ReturnsAsync(user);
|
||||
users.Setup(x => x.UpdateAsync(user)).ReturnsAsync(IdentityResult.Success);
|
||||
var controller = new AuthController(BuildConfig(), users.Object, Mock.Of<ITokenService>(), Mock.Of<IAppEmailSender>(), Mock.Of<IGoogleTokenValidator>(), Mock.Of<IMicrosoftTokenValidator>(), NullLogger<AuthController>.Instance, Mock.Of<ITwoFactorPendingTokenService>(), TestHostFactory.CreateInMemoryDb());
|
||||
|
||||
var result = await controller.UpdateLanguagePreference(new AuthController.UpdateLanguagePreferenceRequest("nb"));
|
||||
|
||||
Assert.IsType<NoContentResult>(result);
|
||||
Assert.Equal("nb-NO", user.UiLanguage);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Language_preference_rejects_an_unsupported_locale()
|
||||
{
|
||||
var user = new ApplicationUser { Id = "user-1", UiLanguage = "en" };
|
||||
var users = CreateUserManager();
|
||||
users.Setup(x => x.GetUserAsync(It.IsAny<System.Security.Claims.ClaimsPrincipal>())).ReturnsAsync(user);
|
||||
var controller = new AuthController(BuildConfig(), users.Object, Mock.Of<ITokenService>(), Mock.Of<IAppEmailSender>(), Mock.Of<IGoogleTokenValidator>(), Mock.Of<IMicrosoftTokenValidator>(), NullLogger<AuthController>.Instance, Mock.Of<ITwoFactorPendingTokenService>(), TestHostFactory.CreateInMemoryDb());
|
||||
|
||||
var result = await controller.UpdateLanguagePreference(new AuthController.UpdateLanguagePreferenceRequest("sv-SE"));
|
||||
|
||||
Assert.IsType<BadRequestObjectResult>(result);
|
||||
users.Verify(x => x.UpdateAsync(It.IsAny<ApplicationUser>()), Times.Never);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Request_email_change_keeps_current_email_and_sends_confirmation_to_new_address()
|
||||
{
|
||||
|
||||
@@ -40,6 +40,9 @@ public sealed class MigrationChainTests
|
||||
SELECT COUNT(*) FROM pragma_table_info('AspNetUsers')
|
||||
WHERE name = 'EmailFollowUpRemindersEnabled' AND dflt_value IN ('1', 'true');
|
||||
"""));
|
||||
Assert.Equal(1, await ScalarAsync<long>(connection, """
|
||||
SELECT COUNT(*) FROM pragma_table_info('AspNetUsers') WHERE name = 'UiLanguage';
|
||||
"""));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -93,6 +96,7 @@ public sealed class MigrationChainTests
|
||||
Assert.Contains("CONSTRAINT `FK_AccountDeletionFiles_Request`", script, StringComparison.Ordinal);
|
||||
Assert.Contains("CREATE TABLE IF NOT EXISTS `AspNetUsers`", script, StringComparison.Ordinal);
|
||||
Assert.Contains("CREATE TABLE IF NOT EXISTS `AiInteractions`", script, StringComparison.Ordinal);
|
||||
Assert.Contains("`UiLanguage` varchar(16)", script, StringComparison.Ordinal);
|
||||
Assert.All(
|
||||
Regex.Matches(script, "CONSTRAINT `([^`]+)`").Select(match => match.Groups[1].Value),
|
||||
identifier => Assert.True(identifier.Length <= 64, $"MariaDB constraint identifier exceeds 64 characters: {identifier}"));
|
||||
|
||||
Reference in New Issue
Block a user