55 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|