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