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

117 lines
4.3 KiB
C#

using Omika.App.Local.Services;
using Omika.Core.Observability.Outbox;
namespace Omika.Tests.Mobile.Local;
/// <summary>
/// Tests du chargeur de configuration locale d'upload de diagnostic. L'upload
/// mobile est OPT-IN via le fichier local <c>diagnostics-upload.json</c> (actif
/// en Debug comme en Release). Ces tests documentent le comportement fail-open :
/// fichier absent/corrompu → upload désactivé, jamais un blocage ni un appel réseau.
/// </summary>
public class DiagnosticUploadConfigurationLoaderTests
{
[Fact]
public void Load_FichierAbsent_UploadDesactive()
{
string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"), "diagnostics-upload.json");
DiagnosticUploadOptions options = DiagnosticUploadConfigurationLoader.Load(path);
Assert.False(options.Enabled);
}
[Fact]
public void Load_FichierEnabledTrue_UploadActiveEtDefautsConserves()
{
string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "diagnostics-upload.json");
File.WriteAllText(path, """{ "Enabled": true }""");
DiagnosticUploadOptions options = DiagnosticUploadConfigurationLoader.Load(path);
Assert.True(options.Enabled);
// Les valeurs par défaut bornées et sûres sont conservées (seul le
// kill-switch est activé par le fichier de test).
Assert.Equal("/api/diagnostics", options.EndpointPath);
Assert.Equal(50, options.BatchSize);
Assert.Equal(256 * 1024, options.MaxBatchBytes);
Assert.Equal(TimeSpan.FromSeconds(5), options.Timeout);
Assert.Equal(TimeSpan.FromHours(1), options.BackoffMax);
}
[Fact]
public void Load_JsonInvalide_UploadDesactive()
{
string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "diagnostics-upload.json");
File.WriteAllText(path, "{ json invalide");
DiagnosticUploadOptions options = DiagnosticUploadConfigurationLoader.Load(path);
Assert.False(options.Enabled);
}
[Fact]
public void Load_FichierVide_UploadDesactive()
{
string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "diagnostics-upload.json");
File.WriteAllText(path, string.Empty);
DiagnosticUploadOptions options = DiagnosticUploadConfigurationLoader.Load(path);
Assert.False(options.Enabled);
}
[Fact]
public void Enable_EcritFichierOptIn_ReluActif()
{
string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
string path = Path.Combine(dir, "diagnostics-upload.json");
DiagnosticUploadConfigurationLoader.Enable(path);
Assert.True(File.Exists(path));
DiagnosticUploadOptions options = DiagnosticUploadConfigurationLoader.Load(path);
Assert.True(options.Enabled);
// Les valeurs par défaut bornées et sûres sont conservées.
Assert.Equal("/api/diagnostics", options.EndpointPath);
Assert.Equal(50, options.BatchSize);
}
[Fact]
public void Enable_CreeDossierParentSiAbsent()
{
string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
string path = Path.Combine(dir, "diagnostics-upload.json");
// Le dossier parent n'existe pas encore : Enable doit le créer.
DiagnosticUploadConfigurationLoader.Enable(path);
Assert.True(File.Exists(path));
}
[Fact]
public void Exists_FichierAbsent_RetourneFalse()
{
string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"), "diagnostics-upload.json");
Assert.False(DiagnosticUploadConfigurationLoader.Exists(path));
}
[Fact]
public void Exists_FichierPresent_RetourneTrue()
{
string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "diagnostics-upload.json");
File.WriteAllText(path, """{ "Enabled": false }""");
Assert.True(DiagnosticUploadConfigurationLoader.Exists(path));
}
}