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

55 lines
1.8 KiB
C#

using Omika.App.Local.Abstractions;
using Omika.App.Local.Models;
namespace Omika.Tests.Mobile.Local;
/// <summary>
/// Double de test de <see cref="IPauseDejeunerPreferenceService"/> : conserve les
/// horaires en mémoire, sans écriture disque ni appel réseau. Le défaut est la
/// préférence par défaut (12:00 → 13:00).
/// </summary>
public sealed class FakePauseDejeunerPreferenceService : IPauseDejeunerPreferenceService
{
private PauseDejeunerPreference _preference = PauseDejeunerPreference.ParDefaut;
/// <summary>Nombre d'appels à <see cref="GetAsync"/>.</summary>
public int GetCallCount { get; private set; }
/// <summary>Horaires effectivement enregistrés.</summary>
public List<(TimeSpan Debut, TimeSpan Fin)> Saved { get; } = [];
/// <summary>Configure la préférence retournée par <see cref="GetAsync"/>.</summary>
public void Set(TimeSpan debut, TimeSpan fin)
=> _preference = new PauseDejeunerPreference { Debut = debut, Fin = fin };
/// <summary>Simule un stockage local indisponible (lecture en échec).</summary>
public bool ThrowOnGet { get; set; }
/// <inheritdoc />
public Task<PauseDejeunerPreference> GetAsync(CancellationToken cancellationToken = default)
{
GetCallCount++;
if (ThrowOnGet)
{
throw new InvalidOperationException("Stockage local indisponible.");
}
return Task.FromResult(_preference);
}
/// <inheritdoc />
public Task SaveAsync(TimeSpan debut, TimeSpan fin, CancellationToken cancellationToken = default)
{
if (fin <= debut)
{
throw new ArgumentException(
"L'heure de fin doit être postérieure à l'heure de début.", nameof(fin));
}
Saved.Add((debut, fin));
Set(debut, fin);
return Task.CompletedTask;
}
}