Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
use OpenNIT\Services\IntuneSyncService;
use OpenNIT\Services\RelutionSyncService;
/**
* Deckt die Ableitung des Asset-Status aus den MDM-Gerätestatus ab.
*
* Entscheidend ist, dass im MDM beendete Geräte (gelöscht, zurückgezogen,
* inaktiv) als ausgemustert geführt werden und nicht als aktive Assets im
* Bestand stehen bleiben, während laufende Geräte aktiv bleiben.
*/
return static function (): void {
/** Ruft mapStatus() der jeweiligen Service-Klasse ohne Konstruktor auf. */
$mapStatus = static function (string $class, array $args): string {
$ref = new ReflectionClass($class);
$svc = $ref->newInstanceWithoutConstructor();
$m = $ref->getMethod('mapStatus');
$m->setAccessible(true);
return $m->invokeArgs($svc, $args);
};
// ----------------------------------------------------------------
// Intune (managementState + complianceState)
// ----------------------------------------------------------------
test('Intune: Retire- und Delete-Zustände gelten als ausgemustert', function () use ($mapStatus) {
foreach (['retirePending', 'retireIssued', 'deletePending', 'deleteIssued'] as $state) {
assertSame('decommissioned', $mapStatus(IntuneSyncService::class, [$state, 'compliant']), $state);
}
});
test('Intune: Wipe-Zustände liegen auf Lager', function () use ($mapStatus) {
assertSame('storage', $mapStatus(IntuneSyncService::class, ['wipePending', 'compliant']));
assertSame('storage', $mapStatus(IntuneSyncService::class, ['wipeIssued', '']));
});
test('Intune: verwaltete Geräte bleiben aktiv', function () use ($mapStatus) {
assertSame('active', $mapStatus(IntuneSyncService::class, ['managed', 'compliant']));
assertSame('active', $mapStatus(IntuneSyncService::class, ['managed', 'noncompliant']));
assertSame('active', $mapStatus(IntuneSyncService::class, ['', 'unknown']));
assertSame('active', $mapStatus(IntuneSyncService::class, ['', '']));
});
test('Intune: Compliance-Fehler ohne Endzustand liegt auf Lager', function () use ($mapStatus) {
assertSame('storage', $mapStatus(IntuneSyncService::class, ['managed', 'error']));
});
// ----------------------------------------------------------------
// Relution (Gerätestatus)
// ----------------------------------------------------------------
test('Relution: gelöschte, zurückgezogene und inaktive Geräte gelten als ausgemustert', function () use ($mapStatus) {
foreach (['DELETED', 'DELETION_REQUESTED', 'RETIRED', 'INACTIVE', 'EXPIRED'] as $state) {
assertSame('decommissioned', $mapStatus(RelutionSyncService::class, [$state]), $state);
}
});
test('Relution: Statuswerte werden unabhängig von der Schreibweise erkannt', function () use ($mapStatus) {
assertSame('decommissioned', $mapStatus(RelutionSyncService::class, ['deleted']));
assertSame('active', $mapStatus(RelutionSyncService::class, ['compliant']));
});
test('Relution: blockierte und gewipte Geräte liegen auf Lager', function () use ($mapStatus) {
assertSame('storage', $mapStatus(RelutionSyncService::class, ['BLOCKED']));
assertSame('storage', $mapStatus(RelutionSyncService::class, ['WIPE_REQUESTED']));
assertSame('storage', $mapStatus(RelutionSyncService::class, ['WIPED']));
});
test('Relution: laufende Zustände bleiben aktiv', function () use ($mapStatus) {
foreach (['COMPLIANT', 'NON_COMPLIANT', 'NOT_COMPLIANT', 'ACTIVE', 'PREPARED', 'ENROLLING', ''] as $state) {
assertSame('active', $mapStatus(RelutionSyncService::class, [$state]), $state ?: '(leer)');
}
});
};