144 lines
4.1 KiB
PHP
144 lines
4.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Belevo\EnelixEMS\Tests;
|
|
|
|
use Belevo\EnelixEMS\Lizenzpruefung;
|
|
use DateTimeImmutable;
|
|
use InvalidArgumentException;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class LizenzpruefungTest extends TestCase
|
|
{
|
|
private const INSTALLATION_ID = '123e4567-e89b-42d3-a456-426614174000';
|
|
|
|
public function testStandardLizenzGibtGrundregelungFrei(): void
|
|
{
|
|
Lizenzpruefung::pruefeLease(
|
|
$this->lease('manager_standard'),
|
|
self::INSTALLATION_ID,
|
|
0,
|
|
$this->zeit('2026-09-19T12:00:00Z')
|
|
);
|
|
|
|
self::assertTrue(true);
|
|
}
|
|
|
|
public function testPeakLizenzGibtLastspitzenmodusFrei(): void
|
|
{
|
|
Lizenzpruefung::pruefeLease(
|
|
$this->lease('manager_peak'),
|
|
self::INSTALLATION_ID,
|
|
2,
|
|
$this->zeit('2026-09-19T12:00:00Z')
|
|
);
|
|
|
|
self::assertTrue(true);
|
|
}
|
|
|
|
public function testStandardLizenzSperrtLastspitzenmodus(): void
|
|
{
|
|
$this->expectException(InvalidArgumentException::class);
|
|
$this->expectExceptionMessage('Peak Shaving ist nicht lizenziert.');
|
|
|
|
Lizenzpruefung::pruefeLease(
|
|
$this->lease('manager_standard'),
|
|
self::INSTALLATION_ID,
|
|
1,
|
|
$this->zeit('2026-09-19T12:00:00Z')
|
|
);
|
|
}
|
|
|
|
public function testAbgelaufeneOfflineFreigabeWirdAbgelehnt(): void
|
|
{
|
|
$this->expectException(InvalidArgumentException::class);
|
|
$this->expectExceptionMessage('Offline-Freigabe ist abgelaufen.');
|
|
|
|
Lizenzpruefung::pruefeLease(
|
|
$this->lease('manager_peak'),
|
|
self::INSTALLATION_ID,
|
|
0,
|
|
$this->zeit('2026-10-03T12:00:00Z')
|
|
);
|
|
}
|
|
|
|
public function testAndereInstallationWirdAbgelehnt(): void
|
|
{
|
|
$this->expectException(InvalidArgumentException::class);
|
|
$this->expectExceptionMessage('anderen Installation');
|
|
|
|
Lizenzpruefung::pruefeLease(
|
|
$this->lease('manager_standard'),
|
|
'223e4567-e89b-42d3-a456-426614174000',
|
|
0,
|
|
$this->zeit('2026-09-19T12:00:00Z')
|
|
);
|
|
}
|
|
|
|
public function testErneuerungWirdAbRefreshAfterFaellig(): void
|
|
{
|
|
$lease = $this->lease('manager_standard');
|
|
|
|
self::assertFalse(Lizenzpruefung::erneuerungFaellig(
|
|
$lease,
|
|
$this->zeit('2026-09-20T11:59:59Z')
|
|
));
|
|
self::assertTrue(Lizenzpruefung::erneuerungFaellig(
|
|
$lease,
|
|
$this->zeit('2026-09-20T12:00:00Z')
|
|
));
|
|
}
|
|
|
|
public function testLeaseOhneManagerBerechtigungWirdAbgelehnt(): void
|
|
{
|
|
$lease = $this->lease('consumer_single');
|
|
|
|
$this->expectException(InvalidArgumentException::class);
|
|
$this->expectExceptionMessage('Manager-Berechtigung fehlt.');
|
|
Lizenzpruefung::pruefeLease(
|
|
$lease,
|
|
self::INSTALLATION_ID,
|
|
0,
|
|
$this->zeit('2026-09-19T12:00:00Z')
|
|
);
|
|
}
|
|
|
|
public function testLizenzcodeWirdWieAufDemServerNormalisiert(): void
|
|
{
|
|
self::assertSame(
|
|
'ENX23456789ABCDEFGH',
|
|
Lizenzpruefung::normalisiereCode('enx-2345-6789-abcd-efgh')
|
|
);
|
|
self::assertTrue(Lizenzpruefung::istLizenzcodeGueltig('ENX-2345-6789-ABCD-EFGH'));
|
|
self::assertFalse(Lizenzpruefung::istLizenzcodeGueltig('ENX-OOOO-OOOO-OOOO-OOOO'));
|
|
}
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
private function lease(string $sku): array
|
|
{
|
|
return [
|
|
'status' => 'active',
|
|
'development' => true,
|
|
'installationId' => self::INSTALLATION_ID,
|
|
'orderId' => '323e4567-e89b-42d3-a456-426614174000',
|
|
'entitlements' => [[
|
|
'sku' => $sku,
|
|
'catalog_key' => $sku,
|
|
'quantity' => 1,
|
|
'status' => 'active',
|
|
]],
|
|
'issuedAt' => '2026-09-19T12:00:00.000Z',
|
|
'refreshAfter' => '2026-09-20T12:00:00.000Z',
|
|
'offlineUntil' => '2026-10-03T12:00:00.000Z',
|
|
];
|
|
}
|
|
|
|
private function zeit(string $wert): int
|
|
{
|
|
return (new DateTimeImmutable($wert))->getTimestamp();
|
|
}
|
|
}
|