using Omika.App.Services;
namespace Omika.Tests.Mobile.Local;
///
/// Tests du PlatformSecureTokenStore : sauvegarde, lecture, remplacement et
/// suppression du Bearer token de session. Le token n'est jamais loggé.
///
public class PlatformSecureTokenStoreTests
{
///
/// Raison commune aux tests de SAUVEGARDE :
/// écrit dans %LOCALAPPDATA%\Omika\session.token. 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.
///
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();
}
}