Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
62 lines
2.3 KiB
PHP
62 lines
2.3 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||
|
||
use LIT\MCP\Integrations\Divi\Release\CheckReport;
|
||
use LIT\MCP\Integrations\Divi\Release\CheckStep;
|
||
use PHPUnit\Framework\TestCase;
|
||
|
||
final class CheckReportTest extends TestCase
|
||
{
|
||
private static function report(array $steps): CheckReport
|
||
{
|
||
return new CheckReport('r1', '2026-10-01T08:00:00+00:00', 1, '5.3.0', '0.6.0', 'key', $steps);
|
||
}
|
||
|
||
private static function green(): array
|
||
{
|
||
return array_map(
|
||
static fn (string $key): CheckStep => new CheckStep($key, []),
|
||
[CheckStep::MANIFEST, CheckStep::MIRRORS, CheckStep::CATALOG, CheckStep::FORMAT, CheckStep::WRITE]
|
||
);
|
||
}
|
||
|
||
public function testGreenOnlyWithEveryStepGreenAndNoneSkipped(): void
|
||
{
|
||
self::assertTrue(self::report(self::green())->green());
|
||
self::assertFalse(self::report([])->green());
|
||
|
||
$red = self::green();
|
||
$red[2] = new CheckStep(CheckStep::CATALOG, ['divi/text: unbekanntes Modul']);
|
||
self::assertFalse(self::report($red)->green());
|
||
|
||
$skipped = self::green();
|
||
$skipped[4] = new CheckStep(CheckStep::WRITE, [], true);
|
||
self::assertFalse(self::report($skipped)->green());
|
||
}
|
||
|
||
public function testFreshOnlyForTheSameVersionsAndStateKey(): void
|
||
{
|
||
$report = self::report(self::green());
|
||
|
||
self::assertTrue($report->freshFor('5.3.0', '0.6.0', 'key'));
|
||
self::assertFalse($report->freshFor('5.3.1', '0.6.0', 'key'), 'Divi updated');
|
||
self::assertFalse($report->freshFor('5.3.0', '0.7.0', 'key'), 'plugin updated');
|
||
self::assertFalse($report->freshFor('5.3.0', '0.6.0', 'other'), 'a Divi file changed');
|
||
}
|
||
|
||
public function testRoundTripsThroughAnArray(): void
|
||
{
|
||
$steps = self::green();
|
||
$steps[1] = new CheckStep(CheckStep::MIRRORS, ['Theme Builder: Nachbau von x() – y']);
|
||
$report = self::report($steps);
|
||
|
||
self::assertEquals($report, CheckReport::fromArray($report->toArray()));
|
||
self::assertNull(CheckReport::fromArray('broken'));
|
||
self::assertNull(CheckReport::fromArray(['id' => 'r1']));
|
||
self::assertSame('Fingerabdrücke nachgebauter Divi-Funktionen', $report->step(CheckStep::MIRRORS)?->label());
|
||
}
|
||
}
|