105 lines
3.2 KiB
C#
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");
|
|
}
|
|
}
|