/
va1eriy
/
taskwards
Обзор
Документация
Войти
/
va1eriy
/
taskwards
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Taskwards.Web.Tests/Infrastructure/Auth/TokenStorageServiceTests.cs
98 строк
3 KB
Valeriy Kokorev
feat: add automatic token refresh with AuthDelegatingHandler
27 фев 2026, 08:52
27 фев 2026, 08:52
afe7bb4
Код
Авторство
О чём код?
using Moq; using Taskwards.Web.Infrastructure.Auth; using Taskwards.Web.Infrastructure.Storage; namespace Taskwards.Web.Tests.Infrastructure.Auth; /// <summary> /// Тесты для TokenStorageService — проверка получения дат истечения токенов /// </summary> public class TokenStorageServiceTests { private readonly Mock<ILocalStorageService> _localStorageMock = new(); private readonly TokenStorageService _sut; public TokenStorageServiceTests() { _sut = new TokenStorageService(_localStorageMock.Object); } /// <summary> /// Парсинг валидной ISO 8601 даты из localStorage /// </summary> [Fact] public async Task GetAccessTokenExpirationAsync_ValidIso8601_ReturnsParsedDateTime() { var expected = new DateTime(2026, 3, 1, 12, 0, 0, DateTimeKind.Utc); _localStorageMock .Setup(x => x.GetItemAsync("access_token_expiration")) .ReturnsAsync(expected.ToString("O")); var result = await _sut.GetAccessTokenExpirationAsync(); Assert.NotNull(result); Assert.Equal(expected, result.Value); } /// <summary> /// Null при отсутствии ключа в localStorage /// </summary> [Fact] public async Task GetAccessTokenExpirationAsync_MissingKey_ReturnsNull() { _localStorageMock .Setup(x => x.GetItemAsync("access_token_expiration")) .ReturnsAsync((string?)null); var result = await _sut.GetAccessTokenExpirationAsync(); Assert.Null(result); } /// <summary> /// Null при невалидной строке в localStorage /// </summary> [Fact] public async Task GetAccessTokenExpirationAsync_InvalidString_ReturnsNull() { _localStorageMock .Setup(x => x.GetItemAsync("access_token_expiration")) .ReturnsAsync("not-a-date"); var result = await _sut.GetAccessTokenExpirationAsync(); Assert.Null(result); } /// <summary> /// GetRefreshTokenExpirationAsync парсит валидную дату /// </summary> [Fact] public async Task GetRefreshTokenExpirationAsync_ValidIso8601_ReturnsParsedDateTime() { var expected = new DateTime(2026, 3, 15, 0, 0, 0, DateTimeKind.Utc); _localStorageMock .Setup(x => x.GetItemAsync("refresh_token_expiration")) .ReturnsAsync(expected.ToString("O")); var result = await _sut.GetRefreshTokenExpirationAsync(); Assert.NotNull(result); Assert.Equal(expected, result.Value); } /// <summary> /// GetRefreshTokenExpirationAsync возвращает null при пустой строке /// </summary> [Fact] public async Task GetRefreshTokenExpirationAsync_EmptyString_ReturnsNull() { _localStorageMock .Setup(x => x.GetItemAsync("refresh_token_expiration")) .ReturnsAsync(""); var result = await _sut.GetRefreshTokenExpirationAsync(); Assert.Null(result); } }