103 lines
2.9 KiB
C#
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();
|
|
}
|
|
}
|