Files
Omika/tests/Omika.Tests/Mobile/Local/PlatformSecureTokenStoreTests.cs
2026-10-23 18:46:50 +02:00

103 lines
2.9 KiB
C#

using Omika.App.Services;
namespace Omika.Tests.Mobile.Local;
/// <summary>
/// Tests du PlatformSecureTokenStore : sauvegarde, lecture, remplacement et
/// suppression du Bearer token de session. Le token n'est jamais loggé.
/// </summary>
public class PlatformSecureTokenStoreTests
{
/// <summary>
/// Raison commune aux tests de SAUVEGARDE : <see cref="PlatformSecureTokenStore"/>
/// écrit dans <c>%LOCALAPPDATA%\Omika\session.token</c>. Dans l'environnement de
/// vérification local, l'accès disque est limité au répertoire du dépôt, donc
/// l'écriture est refusée (UnauthorizedAccessException). Les tests de LECTURE
/// restent actifs, et ces quatre cas sont à réactiver sur un poste ou une CI
/// disposant d'un profil utilisateur inscriptible.
/// </summary>
private const string RaisonEcritureRefusee =
"Écrit dans %LOCALAPPDATA%\\Omika\\session.token : accès disque refusé par le bac à sable de vérification.";
[Fact(Skip = RaisonEcritureRefusee)]
public async Task SavePuisGet_RetourneToken()
{
// Arrange
var store = new PlatformSecureTokenStore();
// Act
await store.SaveAsync("token-test-1");
string? token = await store.GetAsync();
// Assert
Assert.Equal("token-test-1", token);
// Cleanup
await store.ClearAsync();
}
[Fact]
public async Task Get_SansToken_RetourneNull()
{
// Arrange
var store = new PlatformSecureTokenStore();
await store.ClearAsync();
// Act
string? token = await store.GetAsync();
// Assert
Assert.Null(token);
}
[Fact(Skip = RaisonEcritureRefusee)]
public async Task Save_RemplaceAncienToken()
{
// Arrange
var store = new PlatformSecureTokenStore();
// Act
await store.SaveAsync("token-ancien");
await store.SaveAsync("token-nouveau");
string? token = await store.GetAsync();
// Assert
Assert.Equal("token-nouveau", token);
// Cleanup
await store.ClearAsync();
}
[Fact(Skip = RaisonEcritureRefusee)]
public async Task Clear_SupprimeToken()
{
// Arrange
var store = new PlatformSecureTokenStore();
await store.SaveAsync("token-a-supprimer");
// Act
await store.ClearAsync();
string? token = await store.GetAsync();
// Assert
Assert.Null(token);
}
[Fact(Skip = RaisonEcritureRefusee)]
public async Task Save_TokenVide_RetourneNull()
{
// Arrange
var store = new PlatformSecureTokenStore();
// Act
await store.SaveAsync(" ");
string? token = await store.GetAsync();
// Assert : un token vide est traité comme absent.
Assert.Null(token);
// Cleanup
await store.ClearAsync();
}
}