using Omika.App.Local.Abstractions; using Omika.App.Local.Services; using Omika.Core.Contracts.Mobile.Sync; namespace Omika.Tests.Mobile.Local; /// /// Vérifie que chaque écriture locale (Outbox) réveille la surveillance de fond : /// c'est ce qui garantit qu'une saisie part automatiquement dès que le réseau est /// disponible, sans que l'utilisateur appuie sur « Synchroniser ». /// public class OutboxServiceBackgroundSyncTests : LocalTestBase { private sealed class StubBackgroundSync : IBackgroundSyncService { private int _requests; public int Requests => Volatile.Read(ref _requests); public void Start( Func> pendingCountProvider, Func synchronizationCycle, CancellationToken cancellationToken = default) { } public void RequestSync() => Interlocked.Increment(ref _requests); public Task StopAsync() => Task.CompletedTask; } [Fact] public async Task EnqueueAsync_ReveilleLaSurveillanceDeFond() { var signal = new StubBackgroundSync(); var service = new OutboxService(OutboxRepository, signal); await service.EnqueueAsync( "CompteRendu", SyncOperationType.Create, Guid.NewGuid(), "{}"); // Écriture locale effective + réveil de la surveillance (aucun appel réseau ici). Assert.Equal(1, await service.CountPendingAsync()); Assert.Equal(1, signal.Requests); } [Fact] public async Task EnqueueAsync_SansSurveillance_ResteFonctionnel() { // Écran d'activation / tests : aucune surveillance installée, la file // locale doit continuer de fonctionner (envoi manuel uniquement). var service = new OutboxService(OutboxRepository); await service.EnqueueAsync( "CompteRendu", SyncOperationType.Create, Guid.NewGuid(), "{}"); Assert.Equal(1, await service.CountPendingAsync()); } }