feat(i18n): persist Bokmal preference globally

This commit is contained in:
cesnimda
2026-08-28 12:44:02 +02:00
parent b6dcc7c760
commit 5805c1a621
21 changed files with 359 additions and 66 deletions
@@ -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()
{