This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
<?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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user