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