refactor: ReleaseGate::invalidate() als einzige Stelle zum Zurücksetzen des Freigabe-Zustands; CompatibilityMatrix::locked() und ReleaseGate::lockOf() ersetzen die drei Kopien der Sperrprüfung

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jan-Niclas Loosen
2026-10-18 22:57:35 +02:00
co-authored by Claude Opus 5.5
parent 7f9a087b8b
commit 63389f35a8
12 changed files with 129 additions and 68 deletions
@@ -8,6 +8,7 @@ use LIT\MCP\Integrations\Divi\Release\CompatibilityMatrix;
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
use LIT\MCP\Integrations\Divi\Release\FeatureStatus;
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
use LIT\MCP\Tests\Support\ReleaseMatrices;
use PHPUnit\Framework\TestCase;
final class CompatibilityMatrixTest extends TestCase
@@ -84,6 +85,29 @@ final class CompatibilityMatrixTest extends TestCase
);
}
public function testLockedNamesEveryUnusableFeatureOnceInTheGivenOrder(): void
{
$matrix = ReleaseMatrices::matrix(
[DiviFeature::LibraryWrite, DiviFeature::ThemeBuilderWrite, DiviFeature::Catalog],
ReleaseState::Incompatible
);
$locked = $matrix->locked([
DiviFeature::PageWrite,
DiviFeature::ThemeBuilderWrite,
DiviFeature::LibraryWrite,
DiviFeature::ThemeBuilderWrite,
]);
self::assertSame(
[DiviFeature::ThemeBuilderWrite, DiviFeature::LibraryWrite],
array_map(static fn (FeatureStatus $status): DiviFeature => $status->feature, $locked)
);
self::assertSame(ReleaseState::Incompatible, $locked[0]->state);
self::assertSame([], $matrix->locked([DiviFeature::PageWrite, DiviFeature::PageRead]));
self::assertSame([], $matrix->locked([]));
}
public function testToArrayListsEveryFeatureInCaseOrder(): void
{
$rows = self::matrix(['tb-write' => [ReleaseState::Incompatible, ['b']]])->toArray();