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

65 lines
2.0 KiB
C#

using Omika.App.Local.Abstractions;
using Omika.App.Local.Services;
using Omika.Core.Contracts.Mobile.Sync;
namespace Omika.Tests.Mobile.Local;
/// <summary>
/// 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 ».
/// </summary>
public class OutboxServiceBackgroundSyncTests : LocalTestBase
{
private sealed class StubBackgroundSync : IBackgroundSyncService
{
private int _requests;
public int Requests => Volatile.Read(ref _requests);
public void Start(
Func<CancellationToken, Task<int>> pendingCountProvider,
Func<CancellationToken, Task> 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());
}
}