Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
use OpenNIT\Services\DellWarrantyService;
/**
* Deckt die Zugangsdaten-Prüfung der Dell-API ab.
*
* Der Test-Knopf im Backend meldet drei Zustände: fehlende Eingabe, abgelehnte
* Anmeldung und erfolgreicher Abruf. Geprüft wird, dass jeder Zustand als
* solcher erkannt und verständlich benannt wird – ohne die Dell-API zu
* kontaktieren und ohne den Cache zu beschreiben.
*/
return static function (): void {
$db = static fn(): object => new class extends \OpenNIT\Core\Database {
public function __construct() {}
};
/**
* Dienst mit gekapselten HTTP-Aufrufen: Token und Antwort kommen aus dem Test.
*/
$service = static function (string $id, string $secret) use ($db): object {
return new class ($db(), $id, $secret) extends DellWarrantyService {
public ?string $tokenError = null;
public array $response = [];
public ?string $fetchError = null;
public int $fetchCalls = 0;
protected function fetchToken(): string
{
if ($this->tokenError !== null) {
throw new \RuntimeException($this->tokenError);
}
return 'test-token';
}
protected function fetchWarranty(string $serviceTag, string $token): array
{
$this->fetchCalls++;
if ($this->fetchError !== null) {
throw new \RuntimeException($this->fetchError);
}
return $this->response;
}
};
};
$antwort = [[
'productLineDescription' => 'Latitude 5540',
'shipDate' => '2023-04-11T00:00:00Z',
'entitlements' => [[
'entitlementType' => 'INITIAL',
'serviceLevelDescription' => 'ProSupport',
'startDate' => '2023-04-11T00:00:00Z',
'endDate' => (date('Y') + 2) . '-04-11T00:00:00Z',
]],
]];
test('Ohne Zugangsdaten wird gar nicht erst angefragt', function () use ($service) {
$svc = $service('', '');
$res = $svc->testCredentials('ABCD123');
assertFalse($res['ok']);
assertSame(0, $svc->fetchCalls);
assertTrue(str_contains($res['message'], 'Client Secret'));
});
test('Ohne Servicetag wird nur die Anmeldung geprüft', function () use ($service) {
$svc = $service('id', 'secret');
$res = $svc->testCredentials(null);
assertTrue($res['ok']);
assertSame(0, $svc->fetchCalls);
});
test('Ein leerer Servicetag löst keinen Abruf aus', function () use ($service) {
$svc = $service('id', 'secret');
$res = $svc->testCredentials(' ');
assertTrue($res['ok']);
assertSame(0, $svc->fetchCalls);
});
test('Abgelehnte Anmeldung wird als solche gemeldet', function () use ($service) {
$svc = $service('id', 'falsch');
$svc->tokenError = 'Dell-Auth fehlgeschlagen (401): invalid_client';
$res = $svc->testCredentials('ABCD123');
assertFalse($res['ok']);
assertSame(0, $svc->fetchCalls);
assertTrue(str_contains($res['message'], 'invalid_client'));
});
test('Erfolgreicher Abruf nennt Modell und Garantieende', function () use ($service, $antwort) {
$svc = $service('id', 'secret');
$svc->response = $antwort;
$res = $svc->testCredentials('abcd123');
assertTrue($res['ok']);
assertSame(1, $svc->fetchCalls);
// Der Servicetag wird normalisiert in der Rückmeldung genannt
assertTrue(str_contains($res['message'], 'ABCD123'));
$zeilen = implode(' | ', $res['details']);
assertTrue(str_contains($zeilen, 'Latitude 5540'));
assertTrue(str_contains($zeilen, '11.04.' . (date('Y') + 2)));
});
test('Unbekannter Servicetag trennt Anmeldung und Abruf', function () use ($service) {
$svc = $service('id', 'secret');
$svc->response = [];
$res = $svc->testCredentials('ZZZZ999');
assertFalse($res['ok']);
assertTrue(str_contains($res['message'], 'Anmeldung erfolgreich'));
assertTrue(str_contains($res['message'], 'nicht gefunden'));
});
test('Fehler beim Garantie-Abruf entwertet die Anmeldung nicht', function () use ($service) {
$svc = $service('id', 'secret');
$svc->fetchError = 'Dell-API HTTP 403 für Servicetag ABCD123';
$res = $svc->testCredentials('ABCD123');
assertFalse($res['ok']);
assertTrue(str_contains($res['message'], 'Anmeldung erfolgreich'));
assertTrue(str_contains($res['message'], 'HTTP 403'));
});
};