mirror of
https://github.com/DrMboga/WotBlitzStatisticsBlazor.git
synced 2026-10-21 02:17:20 +02:00
feat: prolong token UI logic implemented
This commit is contained in:
1 parent
6390c454d0
commit
7d1d1b5ad6
9 files changed
+223
-13
No files matched your search
@@ -1,22 +1,30 @@
|
||||
using System.Threading;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using WotBlitzStatisticsPro.Blazor.GraphQl;
|
||||
using WotBlitzStatisticsPro.Blazor.Messages;
|
||||
using WotBlitzStatisticsPro.Blazor.Model;
|
||||
using WotBlitzStatisticsPro.Blazor.Services;
|
||||
|
||||
namespace WotBlitzStatisticsPro.Blazor.Tests.Services
|
||||
{
|
||||
public class NavigatorInterceptorTests
|
||||
public class NavigatorInterceptorTests: TestContextBase
|
||||
{
|
||||
private NavigationMessagesInterceptor _service;
|
||||
private MockNavigationManager _navigationManager;
|
||||
private Mock<ILocalStorageService> _localStorageMock;
|
||||
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_localStorageMock = new();
|
||||
|
||||
_navigationManager = new MockNavigationManager();
|
||||
_service = new NavigationMessagesInterceptor(_navigationManager);
|
||||
_service = new NavigationMessagesInterceptor(_navigationManager, _localStorageMock.Object, MediatorMock.Object);
|
||||
|
||||
}
|
||||
|
||||
@@ -30,5 +38,90 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services
|
||||
|
||||
_navigationManager.Uri.Should().Be($"{_navigationManager.BaseUri}player/{accountId}");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task ShouldCallProlongWargamingAccessTokenMessageIfFiveDaysBeforeTokenExpiration()
|
||||
{
|
||||
int accountId = 42;
|
||||
string oldToken = "OldTocken";
|
||||
long expiration = Convert.ToInt64((DateTime.Now.AddDays(4) - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds);
|
||||
_localStorageMock.Setup(s => s.GetItemAsync<LoginInfo>(Constants.LoginInfoLocalStorageKey))
|
||||
.ReturnsAsync(new LoginInfo { AccountId = accountId, AccessToken = oldToken, ExpiresAt = expiration});
|
||||
|
||||
var message = new OpenPlayerInfoMessage(accountId, true);
|
||||
|
||||
await _service.Handle(message, CancellationToken.None);
|
||||
|
||||
MediatorMock.Verify(m => m.Publish(
|
||||
It.IsAny<ProlongWargamingAccessToken>(),
|
||||
It.IsAny<CancellationToken>()), Times.Once);
|
||||
MediatorMock.Verify(m => m.Publish(
|
||||
It.IsAny<RedirectToWgLoginMessage>(),
|
||||
It.IsAny<CancellationToken>()), Times.Never);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task ShouldNotCallProlongWargamingAccessTokenMessageIfMoreThenFiveDaysBeforeTokenExpiration()
|
||||
{
|
||||
int accountId = 42;
|
||||
string oldToken = "OldTocken";
|
||||
long expiration = Convert.ToInt64((DateTime.Now.AddDays(6) - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds);
|
||||
_localStorageMock.Setup(s => s.GetItemAsync<LoginInfo>(Constants.LoginInfoLocalStorageKey))
|
||||
.ReturnsAsync(new LoginInfo { AccountId = accountId, AccessToken = oldToken, ExpiresAt = expiration });
|
||||
|
||||
var message = new OpenPlayerInfoMessage(accountId, true);
|
||||
|
||||
await _service.Handle(message, CancellationToken.None);
|
||||
|
||||
MediatorMock.Verify(m => m.Publish(
|
||||
It.IsAny<ProlongWargamingAccessToken>(),
|
||||
It.IsAny<CancellationToken>()), Times.Never);
|
||||
|
||||
MediatorMock.Verify(m => m.Publish(
|
||||
It.IsAny<RedirectToWgLoginMessage>(),
|
||||
It.IsAny<CancellationToken>()), Times.Never);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task ShouldNotCallProlongWargamingAccessTokenMessageIfPlayerNotLoffedIn()
|
||||
{
|
||||
int accountId = 42;
|
||||
var message = new OpenPlayerInfoMessage(accountId, false);
|
||||
|
||||
await _service.Handle(message, CancellationToken.None);
|
||||
|
||||
MediatorMock.Verify(m => m.Publish(
|
||||
It.IsAny<RedirectToWgLoginMessage>(),
|
||||
It.IsAny<CancellationToken>()), Times.Never);
|
||||
|
||||
MediatorMock.Verify(m => m.Publish(
|
||||
It.IsAny<ProlongWargamingAccessToken>(),
|
||||
It.IsAny<CancellationToken>()), Times.Never);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task ShouldCallRedirectToWgLoginMessageIfTokenIsExpired()
|
||||
{
|
||||
int accountId = 42;
|
||||
string oldToken = "OldTocken";
|
||||
var realm = RealmType.Na;
|
||||
long expiration = Convert.ToInt64((DateTime.Now.AddDays(-1) - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds);
|
||||
_localStorageMock.Setup(s => s.GetItemAsync<LoginInfo>(Constants.LoginInfoLocalStorageKey))
|
||||
.ReturnsAsync(new LoginInfo { AccountId = accountId, AccessToken = oldToken, ExpiresAt = expiration, Realm = realm });
|
||||
|
||||
var message = new OpenPlayerInfoMessage(accountId, true);
|
||||
|
||||
await _service.Handle(message, CancellationToken.None);
|
||||
|
||||
|
||||
|
||||
MediatorMock.Verify(m => m.Publish(
|
||||
It.Is<RedirectToWgLoginMessage>(m => m.Realm == realm),
|
||||
It.IsAny<CancellationToken>()), Times.Once);
|
||||
|
||||
MediatorMock.Verify(m => m.Publish(
|
||||
It.IsAny<ProlongWargamingAccessToken>(),
|
||||
It.IsAny<CancellationToken>()), Times.Never);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -96,5 +96,30 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services
|
||||
It.Is<OpenPlayerInfoMessage>(m => m.AccountId == accountId && m.IsLoggedIn),
|
||||
It.IsAny<CancellationToken>()), Times.Once);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task ShouldCallAppropriateBackendMethodAndSaveNewTokenToLocalStorageWhenProlongWargamingAccessTokenMessageInvoked()
|
||||
{
|
||||
// Setup
|
||||
int accountId = 42;
|
||||
var realm = RealmType.Na;
|
||||
string oldToken = "OldToken";
|
||||
string newToken = "NewToken";
|
||||
long newEvpiration = 129876543;
|
||||
|
||||
_localStorageMock.Setup(s => s.GetItemAsync<LoginInfo>(Constants.LoginInfoLocalStorageKey))
|
||||
.ReturnsAsync(new LoginInfo { AccountId = accountId, AccessToken = oldToken, ExpiresAt = 12345678, Realm = realm });
|
||||
_graphQlBackendMock.Setup(s => s.ProlongToken(accountId, oldToken, realm)).ReturnsAsync(new LoginInfo { AccountId = accountId, AccessToken = newToken, ExpiresAt = newEvpiration, Realm = realm });
|
||||
|
||||
// Avtion
|
||||
await _service.Handle(new ProlongWargamingAccessToken(), CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
_graphQlBackendMock.Verify(s => s.ProlongToken(accountId, oldToken, realm), Times.Once);
|
||||
_localStorageMock.Verify(s => s.SetItemAsync<LoginInfo>(
|
||||
Constants.LoginInfoLocalStorageKey,
|
||||
It.Is<LoginInfo>(l => l.Realm == realm && l.AccountId == accountId && l.AccessToken == newToken && l.ExpiresAt == newEvpiration))
|
||||
, Times.Once);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user