Files
Omika/tests/Omika.Tests/Observability/Diagnostic/DeviceInfoProviderTests.cs
T
2026-10-23 18:46:50 +02:00

89 lines
3.3 KiB
C#

using System.Reflection;
using Omika.Core.Constants;
using Omika.Core.Observability.Diagnostic;
namespace Omika.Tests.Observability.Diagnostic;
public class DeviceInfoProviderTests
{
[Fact]
public void PortableProvider_ReturnsUsefulSnapshot()
{
var provider = new PortableDeviceInfoProvider();
DeviceInfoSnapshot snapshot = provider.GetSnapshot();
Assert.NotNull(snapshot.AppVersion);
Assert.NotNull(snapshot.Platform);
Assert.NotNull(snapshot.OperatingSystem);
Assert.NotNull(snapshot.Architecture);
}
[Fact]
public void Snapshot_ExposesNoForbiddenHardwareIdentifier()
{
string[] names = typeof(DeviceInfoSnapshot).GetProperties().Select(p => p.Name).ToArray();
Assert.DoesNotContain(names, n =>
n.Contains("Imei", StringComparison.OrdinalIgnoreCase)
|| n.Contains("Imsi", StringComparison.OrdinalIgnoreCase)
|| n.Contains("MacAddress", StringComparison.OrdinalIgnoreCase)
|| n.Contains("AdvertisingId", StringComparison.OrdinalIgnoreCase)
|| n.Contains("Serial", StringComparison.OrdinalIgnoreCase)
|| n.Contains("Sim", StringComparison.OrdinalIgnoreCase)
|| n.Contains("Fingerprint", StringComparison.OrdinalIgnoreCase));
}
[Fact]
public void PortableProvider_OperatingSystemIsCanonical_NotOsDescription()
{
var provider = new PortableDeviceInfoProvider();
DeviceInfoSnapshot snapshot = provider.GetSnapshot();
// Dimension analytique stable (Android/iOS/Windows/…) au lieu d'une chaîne
// système longue et variable (ex. « Microsoft Windows 10.0.26200 »).
Assert.Equal(snapshot.Platform, snapshot.OperatingSystem);
Assert.DoesNotContain("Microsoft", snapshot.OperatingSystem, StringComparison.OrdinalIgnoreCase);
}
[Fact]
public void PortableProvider_ScreenFieldsRemainNull()
{
// Le portable (Desktop) n'a pas d'écran mobile : les champs restent null.
var provider = new PortableDeviceInfoProvider();
DeviceInfoSnapshot snapshot = provider.GetSnapshot();
Assert.Null(snapshot.ScreenWidth);
Assert.Null(snapshot.ScreenHeight);
Assert.Null(snapshot.LogicalWidth);
Assert.Null(snapshot.LogicalHeight);
Assert.Null(snapshot.DisplayScale);
}
[Fact]
public void PortableProvider_AppVersionIsNotHardcoded()
{
var provider = new PortableDeviceInfoProvider();
DeviceInfoSnapshot snapshot = provider.GetSnapshot();
// Source réelle (assembly InformationalVersion) avec repli sur
// ApplicationConstants.Version — plus une valeur « 1.0.0.0 » codée en dur.
Assert.NotNull(snapshot.AppVersion);
Assert.Equal(ApplicationConstants.Version, snapshot.AppVersion);
}
[Fact]
public void ThrowingProvider_HostFallsBackToEmpty_NoThrow()
{
var host = new OmikaLocalDiagnostics(
new LocalDiagnosticOptions { Directory = string.Empty },
deviceInfoProvider: new ThrowingDeviceInfoProvider());
Assert.Same(DeviceInfoSnapshot.Empty, host.DeviceInfo);
}
private sealed class ThrowingDeviceInfoProvider : IDeviceInfoProvider
{
public DeviceInfoSnapshot GetSnapshot() => throw new InvalidOperationException("provider défaillant (test)");
}
}