using Bunit; using Marathon.UI.Components; using Marathon.UI.Services; using Marathon.UI.Tests.Support; namespace Marathon.UI.Tests; public sealed class LocaleSwitcherTests : MarathonTestContext { [Fact] public void Defaults_to_russian() { var cut = RenderComponent(); var ruButton = cut.FindAll(".m-segmented__btn")[0]; var enButton = cut.FindAll(".m-segmented__btn")[1]; ruButton.ClassList.Should().Contain("is-active"); enButton.ClassList.Should().NotContain("is-active"); } [Fact] public async Task Switching_to_english_updates_locale_and_persists_setting() { var cut = RenderComponent(); var enButton = cut.FindAll(".m-segmented__btn")[1]; await cut.InvokeAsync(() => enButton.Click()); Locale.Culture.Name.Should().Be(LocaleState.English); System.Globalization.CultureInfo.CurrentUICulture.Name.Should().Be(LocaleState.English); Writer.Saved.Should().ContainKey(LocalizationOptions.SectionName); var saved = (LocalizationOptions)Writer.Saved[LocalizationOptions.SectionName]; saved.DefaultCulture.Should().Be(LocaleState.English); } [Fact] public async Task Switching_to_already_active_locale_is_a_no_op() { var cut = RenderComponent(); var ruButton = cut.FindAll(".m-segmented__btn")[0]; await cut.InvokeAsync(() => ruButton.Click()); Writer.Saved.Should().BeEmpty(); } }