Files
2026-10-23 18:46:50 +02:00

105 lines
3.2 KiB
C#

using Microsoft.Extensions.Logging;
using Omika.App.Services;
namespace Omika.Tests.Mobile.Local;
/// <summary>
/// Tests de la journalisation applicative persistante.
///
/// Enjeu : sans fichier de journal, un repli silencieux de la lecture de date
/// (métadonnée absente, format non géré, échec de lecture) est indiscernable
/// d'un fonctionnement normal sur un appareil réel.
/// </summary>
public class AppLogTests : IDisposable
{
private readonly string _directory;
public AppLogTests()
{
_directory = Path.Combine(Path.GetTempPath(), "omika-log-tests", Guid.NewGuid().ToString("N"));
}
public void Dispose()
{
if (Directory.Exists(_directory))
{
Directory.Delete(_directory, recursive: true);
}
GC.SuppressFinalize(this);
}
[Fact]
public void Configure_CreeLeDossierEtRetourneLeFichierCourant()
{
string? path = AppLog.Configure(_directory);
Assert.NotNull(path);
Assert.True(Directory.Exists(_directory));
Assert.EndsWith(".log", path);
}
[Fact]
public void Write_PersisteLaLigneSurDisque()
{
AppLog.Configure(_directory);
AppLog.Write(LogLevel.Information, "TestCategorie", "DocumentDate: Source=SystemFallback");
string contenu = File.ReadAllText(AppLog.CurrentFilePath!);
Assert.Contains("DocumentDate: Source=SystemFallback", contenu, StringComparison.Ordinal);
Assert.Contains("[Information]", contenu, StringComparison.Ordinal);
Assert.Contains("TestCategorie", contenu, StringComparison.Ordinal);
}
[Fact]
public void AppFileLogger_EcritDansLeFichier()
{
AppLog.Configure(_directory);
var logger = new AppFileLogger<AppLogTests>();
logger.LogInformation("DocumentDate: File={FileName}, Source={Source}", "IMG_1.jpg", "EXIF DateTimeOriginal");
string contenu = File.ReadAllText(AppLog.CurrentFilePath!);
Assert.Contains("IMG_1.jpg", contenu, StringComparison.Ordinal);
Assert.Contains("EXIF DateTimeOriginal", contenu, StringComparison.Ordinal);
}
[Fact]
public void AppFileLogger_IgnoreLesNiveauxInferieursAInformation()
{
AppLog.Configure(_directory);
var logger = new AppFileLogger<AppLogTests>();
logger.LogDebug("trace de debug non attendue");
Assert.False(logger.IsEnabled(LogLevel.Debug));
if (File.Exists(AppLog.CurrentFilePath!))
{
Assert.DoesNotContain("trace de debug non attendue", File.ReadAllText(AppLog.CurrentFilePath!));
}
}
[Fact]
public void Configure_PurgeLesJournauxTropAnciens()
{
Directory.CreateDirectory(_directory);
string ancien = Path.Combine(_directory, "omika-20000101.log");
File.WriteAllText(ancien, "vieux journal");
File.SetLastWriteTime(ancien, DateTime.Now.AddDays(-10));
AppLog.Configure(_directory);
Assert.False(File.Exists(ancien));
}
[Fact]
public void Write_NeLeveJamaisMemeSiLaDestinationEstInvalide()
{
// Un échec de journalisation ne doit jamais perturber l'utilisateur.
AppLog.Configure("\0invalide\0");
AppLog.Write(LogLevel.Warning, "TestCategorie", "message");
}
}