Files
WotBlitzStatisticsBlazor/WotBlitzStatisticsPro.Blazor.Tests/Services/LocalStorageServiceTests.cs
T

83 lines
3.2 KiB
C#
Raw Normal View History

2021-05-07 16:54:21 +02:00
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Bunit;
using FluentAssertions;
using Microsoft.AspNetCore.Components;
using Moq;
using NUnit.Framework;
2021-05-19 15:24:46 +02:00
using WotBlitzStatisticsPro.Blazor.GraphQl;
2021-05-07 16:54:21 +02:00
using WotBlitzStatisticsPro.Blazor.Messages;
using WotBlitzStatisticsPro.Blazor.Model;
using WotBlitzStatisticsPro.Blazor.Services;
using TestContext = Bunit.TestContext;
namespace WotBlitzStatisticsPro.Blazor.Tests.Services
{
public class LocalStorageServiceTests
{
private TestContext _testContext;
private BunitJSInterop _jsRuntimeMock;
protected MockNavigationManager _navigationManagerMock;
private LocalStorageService _localStorageService;
[SetUp]
public void Setup()
{
_navigationManagerMock = new MockNavigationManager();
_testContext = new TestContext();
_jsRuntimeMock = _testContext.JSInterop;
_jsRuntimeMock.Setup<string>("localStorage.getItem", UserSettings.UserSettingsLocalStorageKey).SetResult(string.Empty);
var localStorageSetItemHandler = _jsRuntimeMock.SetupVoid("localStorage.setItem", _ => true);
localStorageSetItemHandler.SetVoidResult();
_localStorageService = new LocalStorageService(_jsRuntimeMock.JSRuntime, _navigationManagerMock);
}
[Test]
public async Task ShouldInvokeJsLocalStorageSetWithAppropriateDataOnChangeCurrentCulture()
{
string cultureName = "fake-CL";
await _localStorageService.Handle(new ChangeCurrentCultureMessage(cultureName), CancellationToken.None);
_jsRuntimeMock.Invocations.Count.Should().Be(2);
var jsInvocations = _jsRuntimeMock.Invocations.ToArray();
jsInvocations[0].Identifier.Should().Be("localStorage.getItem");
jsInvocations[1].Identifier.Should().Be("localStorage.setItem");
var args = jsInvocations[1].Arguments;
args.Should().NotBeNull();
args.Count.Should().Be(2);
args[0].Should().Be("user-settings");
2021-05-19 15:24:46 +02:00
args[1].Should().Be($"{{\"Culture\":\"{cultureName}\",\"RealmType\":{(int)RealmType.Eu}}}");
2021-05-07 16:54:21 +02:00
_navigationManagerMock.NavigationCount.Should().Be(1);
}
2021-05-19 16:32:11 +02:00
[Test]
public async Task ShouldInvokeJsLocalStorageSetWithAppropriateDataOnChangeCurrentRealm()
{
var expectedRealm = RealmType.Asia;
await _localStorageService.Handle(new ChangeCurrentRealmTypeMessage(expectedRealm), CancellationToken.None);
_jsRuntimeMock.Invocations.Count.Should().Be(2);
var jsInvocations = _jsRuntimeMock.Invocations.ToArray();
jsInvocations[0].Identifier.Should().Be("localStorage.getItem");
jsInvocations[1].Identifier.Should().Be("localStorage.setItem");
var args = jsInvocations[1].Arguments;
args.Should().NotBeNull();
args.Count.Should().Be(2);
args[0].Should().Be("user-settings");
args[1].Should().Be($"{{\"Culture\":\"en-US\",\"RealmType\":{(int)expectedRealm}}}");
}
2021-05-07 16:54:21 +02:00
[TearDown]
public void TearDown() => _testContext?.Dispose();
}
}