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(); } }