refactor(compat): Prüfbausteine nach src/Compatibility, Matrix und ManifestCheck generisch
Requirement, Call, ConstantRequirement, Mirror, Problem, FeatureStatus, CompatibilityMatrix, Manifest, ManifestCheck sowie Fingerprints und LineDiff liegen jetzt im divi-freien Kern. Neu: GlobalRequirement, CompatibilityMatrix::fromProblems(), ManifestCheck-Option signatures, DiviManifestCheck::create() und DiviAreas. Divi-Verhalten unverändert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9beb55e228
commit
b511ef6348
@@ -4,11 +4,11 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Support;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Compatibility\CompatibilityMatrix;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\FeatureStatus;
|
||||
use LIT\MCP\Compatibility\FeatureStatus;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
|
||||
/** A release status in which single Divi capabilities are locked – for guard and tool tests. */
|
||||
@@ -37,7 +37,7 @@ final class DiviFeatureFixtures
|
||||
}
|
||||
}
|
||||
|
||||
$status = new ReleaseStatus($overall, $version, null, [], null, matrix: new CompatibilityMatrix($features));
|
||||
$status = new ReleaseStatus($overall, $version, null, [], null, matrix: new CompatibilityMatrix(DiviFeature::cases(), $features));
|
||||
ReleaseGate::useResolver(static fn (): ReleaseStatus => $status);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Support;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Compatibility\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\Compatibility\FeatureStatus;
|
||||
|
||||
/** Compatibility matrices for tests: every feature released, with single features replaced. */
|
||||
final class MatrixFixtures
|
||||
@@ -22,10 +22,10 @@ final class MatrixFixtures
|
||||
$features[$feature->value] = new FeatureStatus($feature, ReleaseState::Released, [], $source);
|
||||
}
|
||||
foreach ($replace as $status) {
|
||||
$features[$status->feature->value] = $status;
|
||||
$features[$status->feature->id()] = $status;
|
||||
}
|
||||
|
||||
return new CompatibilityMatrix($features);
|
||||
return new CompatibilityMatrix(DiviFeature::cases(), $features);
|
||||
}
|
||||
|
||||
/** @param string ...$problems */
|
||||
|
||||
@@ -4,10 +4,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Support;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Compatibility\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\Compatibility\FeatureStatus;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
|
||||
/**
|
||||
@@ -30,7 +30,7 @@ final class ReleaseMatrices
|
||||
: new FeatureStatus($feature, ReleaseState::Released, [], ReleaseStatus::SOURCE_CODE);
|
||||
}
|
||||
|
||||
return new CompatibilityMatrix($features);
|
||||
return new CompatibilityMatrix(DiviFeature::cases(), $features);
|
||||
}
|
||||
|
||||
/** @param list<DiviFeature> $locked */
|
||||
@@ -52,7 +52,7 @@ final class ReleaseMatrices
|
||||
string $source = ReleaseStatus::SOURCE_CODE,
|
||||
?array $release = null
|
||||
): ReleaseStatus {
|
||||
return ReleaseStatus::of($version, CompatibilityMatrix::allReleased($source), $release);
|
||||
return ReleaseStatus::of($version, CompatibilityMatrix::allReleased(DiviFeature::cases(), $source), $release);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -62,6 +62,6 @@ final class ReleaseMatrices
|
||||
*/
|
||||
public static function uniform(ReleaseState $state, string $version = '5.3.0', array $problems = []): ReleaseStatus
|
||||
{
|
||||
return ReleaseStatus::of($version, CompatibilityMatrix::uniform($state, $problems));
|
||||
return ReleaseStatus::of($version, CompatibilityMatrix::uniform(DiviFeature::cases(), $state, $problems));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,11 @@ use LIT\MCP\Abilities\Errors;
|
||||
use LIT\MCP\Abilities\ExposurePolicy;
|
||||
use LIT\MCP\Abilities\ToolRefusal;
|
||||
use LIT\MCP\Abilities\WriteFailed;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeatureGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\RequiresDiviFeatures;
|
||||
use LIT\MCP\Integrations\Integration;
|
||||
use LIT\MCP\Integrations\IntegrationRegistry;
|
||||
|
||||
@@ -24,6 +24,7 @@ final class CoreIndependenceTest extends TestCase
|
||||
'Admin',
|
||||
'ChangeLog',
|
||||
'Cli',
|
||||
'Compatibility',
|
||||
'Guides',
|
||||
'Integrations/Core',
|
||||
'Integrations/Media',
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class CallTest extends TestCase
|
||||
{
|
||||
public static function sample(int $a, int $b = 0): void
|
||||
{
|
||||
}
|
||||
|
||||
private static function method(): string
|
||||
{
|
||||
return self::class . '::sample';
|
||||
}
|
||||
|
||||
public function testAcceptsAnExistingFunctionWithAMatchingArgumentCount(): void
|
||||
{
|
||||
self::assertTrue((new Call('strlen', 1))->accepts());
|
||||
self::assertTrue((new Call('sprintf', 5))->accepts(), 'variadic');
|
||||
}
|
||||
|
||||
public function testRejectsAnArgumentCountThePlatformFunctionDoesNotTake(): void
|
||||
{
|
||||
self::assertFalse((new Call('strlen', 2))->accepts(), 'strlen takes one argument');
|
||||
self::assertFalse((new Call('str_replace', 2))->accepts(), 'str_replace needs three');
|
||||
}
|
||||
|
||||
public function testNullArgumentCountOnlyChecksExistence(): void
|
||||
{
|
||||
self::assertTrue((new Call('str_replace'))->accepts());
|
||||
}
|
||||
|
||||
public function testMissingFunctionOrMethodIsRejected(): void
|
||||
{
|
||||
self::assertFalse((new Call('lit_mcp_missing_function'))->accepts());
|
||||
self::assertFalse((new Call(self::class . '::missing'))->accepts());
|
||||
self::assertFalse((new Call('Lit\Missing\Klass::method'))->accepts());
|
||||
}
|
||||
|
||||
public function testChecksTheArgumentCountOfAMethod(): void
|
||||
{
|
||||
self::assertTrue((new Call(self::method(), 1))->accepts());
|
||||
self::assertTrue((new Call(self::method(), 2))->accepts());
|
||||
self::assertFalse((new Call(self::method(), 0))->accepts(), 'one required');
|
||||
self::assertFalse((new Call(self::method(), 3))->accepts(), 'at most two');
|
||||
}
|
||||
}
|
||||
+101
-10
@@ -2,12 +2,14 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\Capability;
|
||||
use LIT\MCP\Compatibility\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\FeatureStatus;
|
||||
use LIT\MCP\Compatibility\Problem;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
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;
|
||||
|
||||
@@ -15,7 +17,7 @@ final class CompatibilityMatrixTest extends TestCase
|
||||
{
|
||||
public function testAFeatureWithoutResultIsIncompatible(): void
|
||||
{
|
||||
$matrix = new CompatibilityMatrix([
|
||||
$matrix = new CompatibilityMatrix(DiviFeature::cases(), [
|
||||
'page-read' => new FeatureStatus(DiviFeature::PageRead, ReleaseState::Released, [], 'code'),
|
||||
// Under the wrong key: does not count for page-write.
|
||||
'page-write' => new FeatureStatus(DiviFeature::PageRead, ReleaseState::Released, [], 'code'),
|
||||
@@ -32,8 +34,8 @@ final class CompatibilityMatrixTest extends TestCase
|
||||
|
||||
public function testAllReleasedAndAllIncompatible(): void
|
||||
{
|
||||
$released = CompatibilityMatrix::allReleased('database');
|
||||
$broken = CompatibilityMatrix::allIncompatible('kaputt');
|
||||
$released = CompatibilityMatrix::allReleased(DiviFeature::cases(), 'database');
|
||||
$broken = CompatibilityMatrix::allIncompatible(DiviFeature::cases(), 'kaputt');
|
||||
|
||||
foreach (DiviFeature::cases() as $feature) {
|
||||
self::assertTrue($released->of($feature)->usable());
|
||||
@@ -43,7 +45,7 @@ final class CompatibilityMatrixTest extends TestCase
|
||||
self::assertNull($broken->of($feature)->source);
|
||||
}
|
||||
self::assertSame([], $released->unusable());
|
||||
self::assertSame('code', CompatibilityMatrix::allReleased()->source());
|
||||
self::assertSame('code', CompatibilityMatrix::allReleased(DiviFeature::cases())->source());
|
||||
}
|
||||
|
||||
public function testTheStateIsTheWorstFeatureAndEveryProblemIsListedOnce(): void
|
||||
@@ -64,7 +66,7 @@ final class CompatibilityMatrixTest extends TestCase
|
||||
{
|
||||
self::assertSame('auto', self::matrix([])->source());
|
||||
|
||||
$mixed = new CompatibilityMatrix(array_merge(
|
||||
$mixed = new CompatibilityMatrix(DiviFeature::cases(), array_merge(
|
||||
self::features([]),
|
||||
['roles' => new FeatureStatus(DiviFeature::Roles, ReleaseState::Released, [], 'code')]
|
||||
));
|
||||
@@ -146,6 +148,95 @@ final class CompatibilityMatrixTest extends TestCase
|
||||
/** @param array<string, array{ReleaseState, list<string>}> $locked */
|
||||
private static function matrix(array $locked): CompatibilityMatrix
|
||||
{
|
||||
return new CompatibilityMatrix(self::features($locked));
|
||||
return new CompatibilityMatrix(DiviFeature::cases(), self::features($locked));
|
||||
}
|
||||
|
||||
private static function fakeCapability(string $id, bool $write = false): Capability
|
||||
{
|
||||
return new class ($id, $write) implements Capability {
|
||||
public function __construct(private readonly string $id, private readonly bool $write)
|
||||
{
|
||||
}
|
||||
|
||||
public function id(): string
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return 'Fake ' . $this->id;
|
||||
}
|
||||
|
||||
public function isWrite(): bool
|
||||
{
|
||||
return $this->write;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public function testWorksForCapabilitiesOfAnotherIntegration(): void
|
||||
{
|
||||
$read = self::fakeCapability('pods-x');
|
||||
$write = self::fakeCapability('pods-y', true);
|
||||
$stranger = self::fakeCapability('pods-z');
|
||||
|
||||
$matrix = CompatibilityMatrix::uniform([$read, $write], ReleaseState::Untested, ['offen']);
|
||||
|
||||
self::assertSame(ReleaseState::Untested, $matrix->of($read)->state);
|
||||
self::assertSame(['pods-x', 'pods-y'], array_column($matrix->toArray(), 'id'));
|
||||
self::assertFalse($matrix->usable([$read, $write]));
|
||||
self::assertSame(
|
||||
[CompatibilityMatrix::MISSING],
|
||||
$matrix->of($stranger)->problems,
|
||||
'a capability the matrix does not know is incompatible (fail closed)'
|
||||
);
|
||||
self::assertSame(ReleaseState::Released, CompatibilityMatrix::allReleased([$read])->state());
|
||||
self::assertSame(
|
||||
ReleaseState::Incompatible,
|
||||
CompatibilityMatrix::allIncompatible([$read], 'kaputt')->of($read)->state
|
||||
);
|
||||
}
|
||||
|
||||
public function testTheSourceConstantsLiveOnTheMatrix(): void
|
||||
{
|
||||
self::assertSame('code', CompatibilityMatrix::SOURCE_CODE);
|
||||
self::assertSame('database', CompatibilityMatrix::SOURCE_DATABASE);
|
||||
self::assertSame('auto', CompatibilityMatrix::SOURCE_AUTO);
|
||||
}
|
||||
|
||||
public function testFromProblemsWeighsHardAndSoftProblemsPerCapability(): void
|
||||
{
|
||||
$a = self::fakeCapability('pods-a');
|
||||
$b = self::fakeCapability('pods-b');
|
||||
$c = self::fakeCapability('pods-c');
|
||||
$problems = [
|
||||
new Problem('hart', [$a], Problem::CALL),
|
||||
new Problem('Signatur', [$b], Problem::SIGNATURE),
|
||||
new Problem('Referenz', [$c], Problem::REFERENCE_MISSING),
|
||||
];
|
||||
|
||||
$released = CompatibilityMatrix::fromProblems([$a, $b, $c], $problems, CompatibilityMatrix::SOURCE_CODE, false);
|
||||
self::assertSame(ReleaseState::Incompatible, $released->of($a)->state, 'hard locks even a released version');
|
||||
self::assertSame(['hart'], $released->of($a)->problems);
|
||||
self::assertSame(CompatibilityMatrix::SOURCE_CODE, $released->of($b)->source);
|
||||
|
||||
$manual = CompatibilityMatrix::fromProblems([$a, $b, $c], $problems, null, false);
|
||||
self::assertSame(ReleaseState::Untested, $manual->of($b)->state);
|
||||
self::assertSame(['Signatur'], $manual->of($b)->problems);
|
||||
|
||||
$auto = CompatibilityMatrix::fromProblems([$a, $b, $c], $problems, null, true);
|
||||
self::assertSame(ReleaseState::Incompatible, $auto->of($b)->state, 'changed signature');
|
||||
self::assertSame(ReleaseState::Untested, $auto->of($c)->state, 'reference missing');
|
||||
|
||||
$clean = CompatibilityMatrix::fromProblems([$a], [new Problem('b', [$b], Problem::CALL)], null, true);
|
||||
self::assertSame(ReleaseState::Released, $clean->of($a)->state);
|
||||
self::assertSame(CompatibilityMatrix::SOURCE_AUTO, $clean->of($a)->source);
|
||||
|
||||
$everyone = CompatibilityMatrix::fromProblems([$a, $b], [new Problem('alle', [], Problem::CALL)], null, true);
|
||||
self::assertSame([ReleaseState::Incompatible, ReleaseState::Incompatible], [
|
||||
$everyone->of($a)->state,
|
||||
$everyone->of($b)->state,
|
||||
], 'a problem without capabilities concerns every one');
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -2,11 +2,11 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use LIT\MCP\Compatibility\FeatureStatus;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\FeatureStatus;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class FeatureStatusTest extends TestCase
|
||||
+2
-2
@@ -2,9 +2,9 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\LineDiff;
|
||||
use LIT\MCP\Compatibility\LineDiff;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class LineDiffTest extends TestCase
|
||||
+97
-10
@@ -2,19 +2,22 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use ArrayObject;
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\ConstantRequirement;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Compatibility\ConstantRequirement;
|
||||
use LIT\MCP\Compatibility\GlobalRequirement;
|
||||
use LIT\MCP\Compatibility\Manifest;
|
||||
use LIT\MCP\Compatibility\ManifestCheck;
|
||||
use LIT\MCP\Compatibility\Mirror;
|
||||
use LIT\MCP\Compatibility\Problem;
|
||||
use LIT\MCP\Compatibility\SignatureFingerprint;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\ManifestCheck;
|
||||
use LIT\MCP\Integrations\Divi\Release\Mirror;
|
||||
use LIT\MCP\Integrations\Divi\Release\Problem;
|
||||
use LIT\MCP\Integrations\Divi\Release\SignatureFingerprint;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
use LogicException;
|
||||
use RuntimeException;
|
||||
|
||||
final class ManifestCheckTest extends TestCase
|
||||
@@ -23,7 +26,7 @@ final class ManifestCheckTest extends TestCase
|
||||
{
|
||||
$manifests = [
|
||||
'A' => new Manifest(
|
||||
Manifest::PAGES,
|
||||
DiviAreas::PAGES,
|
||||
calls: [
|
||||
new Call('strlen', 1),
|
||||
new Call('lit_mcp_missing_function', 0),
|
||||
@@ -140,7 +143,7 @@ final class ManifestCheckTest extends TestCase
|
||||
private function featureCheck(?\Closure $current = null): ManifestCheck
|
||||
{
|
||||
$manifest = new Manifest(
|
||||
Manifest::PAGES,
|
||||
DiviAreas::PAGES,
|
||||
calls: [
|
||||
new Call('strlen', 1),
|
||||
new Call('str_replace', 3, [DiviFeature::PageWrite]),
|
||||
@@ -232,4 +235,88 @@ final class ManifestCheckTest extends TestCase
|
||||
array_column(self::rows($check->problems()), 'label')
|
||||
);
|
||||
}
|
||||
|
||||
public function testWithoutSignaturesACallWithoutReferenceIsNoProblem(): void
|
||||
{
|
||||
$check = new ManifestCheck(
|
||||
['A' => new Manifest(DiviAreas::PAGES, calls: [new Call('strlen', 1), new Call('trim', 1)])],
|
||||
[],
|
||||
null,
|
||||
null,
|
||||
false
|
||||
);
|
||||
|
||||
self::assertSame([], $check->codeProblems());
|
||||
}
|
||||
|
||||
public function testWithoutSignaturesAMissingCallStillFails(): void
|
||||
{
|
||||
$check = new ManifestCheck(
|
||||
['A' => new Manifest(DiviAreas::PAGES, calls: [new Call('strlen', 2)])],
|
||||
signatures: false
|
||||
);
|
||||
|
||||
self::assertSame(['call'], array_column(self::rows($check->codeProblems()), 'kind'));
|
||||
}
|
||||
|
||||
public function testAMissingGlobalIsAHardProblemWithItsFeatures(): void
|
||||
{
|
||||
$GLOBALS['lit_mcp_present_global'] = 1;
|
||||
$GLOBALS['lit_mcp_null_global'] = null;
|
||||
$check = new ManifestCheck(['A' => new Manifest(
|
||||
DiviAreas::PAGES,
|
||||
globals: [
|
||||
new GlobalRequirement('lit_mcp_present_global'),
|
||||
new GlobalRequirement('lit_mcp_null_global'),
|
||||
new GlobalRequirement('lit_mcp_missing_global', [DiviFeature::Catalog]),
|
||||
],
|
||||
features: [DiviFeature::PageRead]
|
||||
)], signatures: false);
|
||||
|
||||
try {
|
||||
$problems = $check->problems();
|
||||
$failed = ManifestCheck::failed($check->codeChecks());
|
||||
} finally {
|
||||
unset($GLOBALS['lit_mcp_present_global'], $GLOBALS['lit_mcp_null_global']);
|
||||
}
|
||||
|
||||
self::assertSame(
|
||||
[
|
||||
['label' => 'Seiten: Globale Variable lit_mcp_null_global', 'kind' => 'global',
|
||||
'features' => ['page-read']],
|
||||
['label' => 'Seiten: Globale Variable lit_mcp_missing_global', 'kind' => 'global',
|
||||
'features' => ['catalog']],
|
||||
],
|
||||
self::rows($problems)
|
||||
);
|
||||
self::assertTrue($problems[0]->isHard());
|
||||
self::assertSame(
|
||||
['Seiten: Globale Variable lit_mcp_null_global', 'Seiten: Globale Variable lit_mcp_missing_global'],
|
||||
$failed
|
||||
);
|
||||
}
|
||||
|
||||
public function testWithoutCurrentClosureEveryMirrorIsUnreadable(): void
|
||||
{
|
||||
$check = new ManifestCheck(['A' => new Manifest(
|
||||
DiviAreas::PAGES,
|
||||
mirrors: [new Mirror('same', 'a.php', 'a', null, 'gleich')]
|
||||
)], ['same' => 'h1']);
|
||||
|
||||
self::assertSame(['mirror'], array_column(self::rows($check->mirrorProblems()), 'kind'));
|
||||
}
|
||||
|
||||
public function testBlockTypesWithoutKnowsBlockClosureRefuseToBuildTheCheck(): void
|
||||
{
|
||||
$this->expectException(LogicException::class);
|
||||
|
||||
new ManifestCheck(['A' => new Manifest(DiviAreas::PAGES, blockTypes: ['divi/x'])]);
|
||||
}
|
||||
|
||||
public function testWithoutBlockTypesNoKnowsBlockClosureIsNeeded(): void
|
||||
{
|
||||
$check = new ManifestCheck(['A' => new Manifest(DiviAreas::PAGES, calls: [new Call('strlen', 1)])]);
|
||||
|
||||
self::assertSame([], $check->registrationChecks());
|
||||
}
|
||||
}
|
||||
+20
-10
@@ -2,13 +2,15 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\ConstantRequirement;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Compatibility\ConstantRequirement;
|
||||
use LIT\MCP\Compatibility\GlobalRequirement;
|
||||
use LIT\MCP\Compatibility\Manifest;
|
||||
use LIT\MCP\Compatibility\Mirror;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\Mirror;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class ManifestTest extends TestCase
|
||||
@@ -39,7 +41,7 @@ final class ManifestTest extends TestCase
|
||||
public function testNamesListEveryDeclaredDiviName(): void
|
||||
{
|
||||
$manifest = new Manifest(
|
||||
Manifest::LIBRARY,
|
||||
DiviAreas::LIBRARY,
|
||||
calls: [new Call('et_pb_is_allowed', 1), new Call('ET\Builder\GlobalLayout::is_global_layout_template', 1)],
|
||||
constants: ['ET_BUILDER_PRODUCT_VERSION'],
|
||||
postTypes: ['et_pb_layout'],
|
||||
@@ -59,7 +61,7 @@ final class ManifestTest extends TestCase
|
||||
public function testPlainConstantNamesBecomeRequirementsWithALabel(): void
|
||||
{
|
||||
$manifest = new Manifest(
|
||||
Manifest::CATALOG,
|
||||
DiviAreas::CATALOG,
|
||||
constants: ['ET_BUILDER_PRODUCT_VERSION', new ConstantRequirement('ET_OTHER', [DiviFeature::Roles])]
|
||||
);
|
||||
|
||||
@@ -77,7 +79,7 @@ final class ManifestTest extends TestCase
|
||||
{
|
||||
$call = new Call('et_pb_is_allowed', 1);
|
||||
$mirror = new Mirror('m', 'a.php', 'a', null, 'Terme');
|
||||
$manifest = new Manifest(Manifest::LIBRARY, calls: [$call], constants: ['ET_X'], mirrors: [$mirror]);
|
||||
$manifest = new Manifest(DiviAreas::LIBRARY, calls: [$call], constants: ['ET_X'], mirrors: [$mirror]);
|
||||
|
||||
$requirements = $manifest->requirements();
|
||||
|
||||
@@ -93,7 +95,7 @@ final class ManifestTest extends TestCase
|
||||
$inherited = new Call('et_b');
|
||||
$mirror = new Mirror('m', 'a.php', 'a', null, 'x', [DiviFeature::LibraryWrite]);
|
||||
$manifest = new Manifest(
|
||||
Manifest::PAGES,
|
||||
DiviAreas::PAGES,
|
||||
calls: [$own, $inherited],
|
||||
constants: ['ET_X'],
|
||||
mirrors: [$mirror],
|
||||
@@ -110,6 +112,14 @@ final class ManifestTest extends TestCase
|
||||
{
|
||||
$call = new Call('et_a');
|
||||
|
||||
self::assertSame([], (new Manifest(Manifest::PAGES, calls: [$call]))->featuresOf($call));
|
||||
self::assertSame([], (new Manifest(DiviAreas::PAGES, calls: [$call]))->featuresOf($call));
|
||||
}
|
||||
|
||||
public function testGlobalsAreRequirementsAndNames(): void
|
||||
{
|
||||
$manifest = new Manifest(DiviAreas::PAGES, globals: [new GlobalRequirement('wp_cache_clear_cache')]);
|
||||
|
||||
self::assertSame('wp_cache_clear_cache', $manifest->names()[0]);
|
||||
self::assertSame('Globale Variable wp_cache_clear_cache', $manifest->requirements()[0]->label());
|
||||
}
|
||||
}
|
||||
+36
-4
@@ -2,10 +2,11 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use LIT\MCP\Compatibility\Capability;
|
||||
use LIT\MCP\Compatibility\Problem;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\Problem;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class ProblemTest extends TestCase
|
||||
@@ -44,7 +45,7 @@ final class ProblemTest extends TestCase
|
||||
['label' => 'Seiten: Nachbau von a() – x', 'kind' => 'mirror', 'features' => ['page-write']],
|
||||
$problem->toArray()
|
||||
);
|
||||
self::assertEquals($problem, Problem::fromArray($problem->toArray()));
|
||||
self::assertEquals($problem, Problem::fromArray($problem->toArray(), DiviFeature::tryFrom(...)));
|
||||
}
|
||||
|
||||
public function testFromArrayRefusesAnythingElse(): void
|
||||
@@ -56,7 +57,38 @@ final class ProblemTest extends TestCase
|
||||
'unknown feature' => ['label' => 'x', 'kind' => 'call', 'features' => ['page-delete']],
|
||||
'features no list' => ['label' => 'x', 'kind' => 'call', 'features' => 'page-write'],
|
||||
] as $case => $row) {
|
||||
self::assertNull(Problem::fromArray($row), $case);
|
||||
self::assertNull(Problem::fromArray($row, DiviFeature::tryFrom(...)), $case);
|
||||
}
|
||||
}
|
||||
|
||||
public function testFromArrayResolvesFeaturesThroughTheLookupClosure(): void
|
||||
{
|
||||
$pods = new class implements Capability {
|
||||
public function id(): string
|
||||
{
|
||||
return 'pods-x';
|
||||
}
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return 'Pods X';
|
||||
}
|
||||
|
||||
public function isWrite(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
$lookup = static fn (string $id): ?Capability => $id === 'pods-x' ? $pods : null;
|
||||
|
||||
$problem = Problem::fromArray(['label' => 'x', 'kind' => 'call', 'features' => ['pods-x']], $lookup);
|
||||
self::assertNotNull($problem);
|
||||
self::assertSame([$pods], $problem->features);
|
||||
self::assertTrue($problem->concerns($pods));
|
||||
|
||||
self::assertNull(
|
||||
Problem::fromArray(['label' => 'x', 'kind' => 'call', 'features' => ['pods-x', 'page-read']], $lookup),
|
||||
'one unknown ID discards the problem'
|
||||
);
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -2,11 +2,11 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use ArrayObject;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\SignatureFingerprint;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Compatibility\SignatureFingerprint;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/** Stand-in for a Divi class: one baseline method and one variant per property the fingerprint covers. */
|
||||
@@ -191,7 +191,7 @@ final class SignatureFingerprintTest extends TestCase
|
||||
public function testTheClassNeverIncludesAFile(): void
|
||||
{
|
||||
$source = (string) file_get_contents(
|
||||
dirname(__DIR__, 5) . '/src/Integrations/Divi/Release/SignatureFingerprint.php'
|
||||
dirname(__DIR__, 3) . '/src/Compatibility/SignatureFingerprint.php'
|
||||
);
|
||||
$forbidden = [T_INCLUDE, T_INCLUDE_ONCE, T_REQUIRE, T_REQUIRE_ONCE, T_EVAL];
|
||||
|
||||
+2
-2
@@ -2,9 +2,9 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
namespace LIT\MCP\Tests\Unit\Compatibility;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\SourceFingerprint;
|
||||
use LIT\MCP\Compatibility\SourceFingerprint;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use RuntimeException;
|
||||
|
||||
@@ -7,15 +7,15 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Admin;
|
||||
use Brain\Monkey\Actions;
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Admin\AdminPostAction;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Admin\DiviTab;
|
||||
use LIT\MCP\Integrations\Divi\Release\CheckReport;
|
||||
use LIT\MCP\Integrations\Divi\Release\CheckReportStore;
|
||||
use LIT\MCP\Integrations\Divi\Release\CheckStep;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\FeatureOverview;
|
||||
use LIT\MCP\Integrations\Divi\Release\FeatureStatus;
|
||||
use LIT\MCP\Compatibility\FeatureStatus;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStore;
|
||||
use LIT\MCP\Integrations\Divi\Release\WriteProbe;
|
||||
|
||||
@@ -5,17 +5,17 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Cli;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Cli\DiviCheckCommand;
|
||||
use LIT\MCP\Integrations\Divi\Release\CheckReport;
|
||||
use LIT\MCP\Integrations\Divi\Release\CheckReportStore;
|
||||
use LIT\MCP\Integrations\Divi\Release\CheckStep;
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityCheck;
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\CompatibilityMatrix;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviReference;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseResolver;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\MatrixFixtures;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
|
||||
@@ -14,7 +14,7 @@ use LIT\MCP\Integrations\Divi\Library\UsageReport;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Abilities\WriteFailed;
|
||||
use LIT\MCP\Tests\Support\FakeChangeLog;
|
||||
|
||||
@@ -6,9 +6,9 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Integrations\Divi\Design\DesignSystemReader;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
|
||||
final class DesignSystemReaderTest extends TestCase
|
||||
@@ -18,7 +18,7 @@ final class DesignSystemReaderTest extends TestCase
|
||||
$manifest = DesignSystemReader::manifest();
|
||||
|
||||
self::assertContains(DesignSystemReader::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::DESIGN, $manifest->area);
|
||||
self::assertSame(DiviAreas::DESIGN, $manifest->area);
|
||||
self::assertSame(
|
||||
['GlobalData::get_global_colors()', 'GlobalData::get_global_variables()',
|
||||
'GlobalPreset::get_data()'],
|
||||
|
||||
@@ -4,13 +4,13 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||||
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Design\DesignSystemWriter;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
@@ -22,7 +22,7 @@ final class DesignSystemWriterTest extends TestCase
|
||||
$manifest = DesignSystemWriter::manifest();
|
||||
|
||||
self::assertContains(DesignSystemWriter::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::DESIGN, $manifest->area);
|
||||
self::assertSame(DiviAreas::DESIGN, $manifest->area);
|
||||
self::assertSame(
|
||||
[
|
||||
'GlobalPreset::get_data()', 'GlobalPreset::prepare_data()', 'GlobalPreset::validate_preset_count()',
|
||||
|
||||
@@ -8,6 +8,7 @@ use Brain\Monkey\Functions;
|
||||
use Closure;
|
||||
use LIT\MCP\Abilities\Errors;
|
||||
use LIT\MCP\Abilities\WriteFailed;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\BlockTree\Block;
|
||||
use LIT\MCP\Integrations\Divi\Design\DesignChange;
|
||||
use LIT\MCP\Integrations\Divi\Design\DesignSystemWriter;
|
||||
@@ -24,7 +25,6 @@ use LIT\MCP\Integrations\Divi\Library\GlobalUsages;
|
||||
use LIT\MCP\Integrations\Divi\Library\UsageReport;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Tests\Support\FakeChangeLog;
|
||||
use LIT\MCP\Tests\Support\LockTable;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
|
||||
@@ -7,12 +7,12 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Abilities\Errors;
|
||||
use LIT\MCP\Abilities\WriteFailed;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Design\DiviFontsUploadAbility;
|
||||
use LIT\MCP\Integrations\Divi\Design\FontCatalog;
|
||||
use LIT\MCP\Integrations\Divi\Design\FontInstaller;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Media\RemoteFileFetcher;
|
||||
use LIT\MCP\Limits;
|
||||
use LIT\MCP\Tests\Support\FakeChangeLog;
|
||||
|
||||
@@ -6,10 +6,10 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Integrations\Divi\Design\FontCatalog;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
|
||||
/**
|
||||
@@ -24,7 +24,7 @@ final class FontCatalogTest extends TestCase
|
||||
$manifest = FontCatalog::manifest();
|
||||
|
||||
self::assertContains(FontCatalog::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::DESIGN, $manifest->area);
|
||||
self::assertSame(DiviAreas::DESIGN, $manifest->area);
|
||||
self::assertSame(
|
||||
[
|
||||
'et_builder_get_fonts()', 'et_builder_get_custom_fonts()', 'et_builder_get_google_fonts()',
|
||||
|
||||
@@ -5,15 +5,15 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Design\FontInstaller;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\ConstantRequirement;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Compatibility\ConstantRequirement;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
@@ -65,7 +65,7 @@ final class FontInstallerTest extends TestCase
|
||||
$manifest = FontInstaller::manifest();
|
||||
|
||||
self::assertContains(FontInstaller::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::DESIGN, $manifest->area);
|
||||
self::assertSame(DiviAreas::DESIGN, $manifest->area);
|
||||
self::assertSame(
|
||||
['FontsUtility::mime_types_font()', 'HooksRegistration::check_filetype_and_ext_font()',
|
||||
'FontsUtility::font_add()', 'FontsUtility::font_remove()'],
|
||||
|
||||
@@ -5,14 +5,14 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Design\GlobalColorsAdapter;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
@@ -32,7 +32,7 @@ final class GlobalColorsAdapterTest extends TestCase
|
||||
$manifest = GlobalColorsAdapter::manifest();
|
||||
|
||||
self::assertContains(GlobalColorsAdapter::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::DESIGN, $manifest->area);
|
||||
self::assertSame(DiviAreas::DESIGN, $manifest->area);
|
||||
self::assertSame(
|
||||
['GlobalData::get_global_colors()', 'GlobalData::sanitize_global_colors_data()',
|
||||
'GlobalData::set_global_colors()'],
|
||||
|
||||
@@ -5,14 +5,14 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Design\GlobalVariablesAdapter;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
@@ -33,7 +33,7 @@ final class GlobalVariablesAdapterTest extends TestCase
|
||||
$manifest = GlobalVariablesAdapter::manifest();
|
||||
|
||||
self::assertContains(GlobalVariablesAdapter::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::DESIGN, $manifest->area);
|
||||
self::assertSame(DiviAreas::DESIGN, $manifest->area);
|
||||
self::assertSame(
|
||||
['GlobalData::get_global_variables()', 'GlobalData::set_global_variables()', 'et_pb_is_allowed()'],
|
||||
array_map(static fn (Call $call): string => $call->label(), $manifest->calls)
|
||||
|
||||
@@ -21,7 +21,7 @@ use LIT\MCP\Integrations\Divi\Pages\DiviSaver;
|
||||
use LIT\MCP\Integrations\Divi\Pages\SaveScope;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Tests\Support\FakeChangeLog;
|
||||
use LIT\MCP\Tests\Support\LibraryFixtures;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
|
||||
@@ -6,14 +6,14 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use InvalidArgumentException;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Design\ThemeOptionsAdapter;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
@@ -40,7 +40,7 @@ final class ThemeOptionsAdapterTest extends TestCase
|
||||
$manifest = ThemeOptionsAdapter::manifest();
|
||||
|
||||
self::assertContains(ThemeOptionsAdapter::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::DESIGN, $manifest->area);
|
||||
self::assertSame(DiviAreas::DESIGN, $manifest->area);
|
||||
self::assertSame(
|
||||
[
|
||||
'et_sanitize_font_choices()', 'et_sanitize_global_font_weight()', 'et_sanitize_float_number()',
|
||||
|
||||
@@ -5,10 +5,11 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\DiviCompatibility;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\ManifestCheck;
|
||||
use LIT\MCP\Integrations\Divi\Release\Mirror;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Compatibility\Manifest;
|
||||
use LIT\MCP\Compatibility\ManifestCheck;
|
||||
use LIT\MCP\Compatibility\Mirror;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use RuntimeException;
|
||||
|
||||
@@ -31,7 +32,7 @@ final class DiviCompatibilityTest extends TestCase
|
||||
{
|
||||
$check = new ManifestCheck(
|
||||
['X' => new Manifest(
|
||||
Manifest::LIBRARY,
|
||||
DiviAreas::LIBRARY,
|
||||
calls: [new Call('strlen', 1)],
|
||||
postTypes: ['et_pb_layout'],
|
||||
mirrors: [new Mirror('m', 'a.php', 'a', null, 'Terme')]
|
||||
@@ -51,7 +52,7 @@ final class DiviCompatibilityTest extends TestCase
|
||||
{
|
||||
$labels = implode("\n", array_keys(DiviCompatibility::defaults()));
|
||||
|
||||
$areas = [Manifest::PAGES, Manifest::LIBRARY, Manifest::THEME_BUILDER, Manifest::DESIGN, Manifest::CATALOG];
|
||||
$areas = [DiviAreas::PAGES, DiviAreas::LIBRARY, DiviAreas::THEME_BUILDER, DiviAreas::DESIGN, DiviAreas::CATALOG];
|
||||
foreach ($areas as $area) {
|
||||
self::assertStringContainsString($area . ': ', $labels);
|
||||
}
|
||||
|
||||
@@ -5,13 +5,13 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Core\EnvironmentComponent;
|
||||
use LIT\MCP\Integrations\Divi\DiviCompatibility;
|
||||
use LIT\MCP\Integrations\Divi\DiviEnvironmentComponent;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\FeatureOverview;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\FeatureFakeTool;
|
||||
use LIT\MCP\Tests\Support\MatrixFixtures;
|
||||
|
||||
@@ -9,7 +9,7 @@ use LIT\MCP\Abilities\WriteFailed;
|
||||
use LIT\MCP\Integrations\Divi\Library\DiviLibraryStore;
|
||||
use LIT\MCP\Integrations\Divi\Library\LibraryItemSpec;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\WordPress\Content\NewDraft;
|
||||
use LIT\MCP\Tests\Support\FakeChangeLog;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
@@ -121,7 +121,7 @@ final class DiviLibraryStoreTest extends TestCase
|
||||
$manifest = DiviLibraryStore::manifest();
|
||||
|
||||
self::assertContains(DiviLibraryStore::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::LIBRARY, $manifest->area);
|
||||
self::assertSame(DiviAreas::LIBRARY, $manifest->area);
|
||||
self::assertSame(['et_pb_layout'], $manifest->postTypes);
|
||||
self::assertSame(
|
||||
['scope', 'layout_type', 'module_width', 'layout_category', 'layout_tag'],
|
||||
|
||||
@@ -4,13 +4,13 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Pages;
|
||||
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\BlockTree\Parser;
|
||||
use LIT\MCP\Integrations\Divi\Compose\VariableRef;
|
||||
use LIT\MCP\Integrations\Divi\Pages\DiviContentComposer;
|
||||
use LIT\MCP\Integrations\Divi\Pages\DiviSaver;
|
||||
use LIT\MCP\Integrations\Divi\Pages\DynamicContentMap;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Tests\Support\DiviFeatureFixtures;
|
||||
use LIT\MCP\Tests\Support\DiviFixtures;
|
||||
use LIT\MCP\Tests\Support\DiviWriterFixture;
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Pages;
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Integrations\Divi\Pages\DiviPages;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
use RuntimeException;
|
||||
use WP_Post;
|
||||
@@ -63,7 +63,7 @@ final class DiviPagesTest extends TestCase
|
||||
$manifest = DiviPages::manifest();
|
||||
|
||||
self::assertContains(DiviPages::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::PAGES, $manifest->area);
|
||||
self::assertSame(DiviAreas::PAGES, $manifest->area);
|
||||
self::assertSame(['vb-sync-flags'], array_map(static fn ($mirror): string => $mirror->id, $manifest->mirrors));
|
||||
self::assertSame('SyncToServerController::update()', $manifest->mirrors[0]->label());
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Integrations\Divi\Release\CheckStep;
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityCheck;
|
||||
use LIT\MCP\Integrations\Divi\Release\FormatCheck;
|
||||
use LIT\MCP\Integrations\Divi\Release\ManifestCheck;
|
||||
use LIT\MCP\Compatibility\ManifestCheck;
|
||||
use LIT\MCP\Integrations\Divi\Release\WriteProbe;
|
||||
use LIT\MCP\Plugin;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class DiviAreasTest extends TestCase
|
||||
{
|
||||
public function testTheFiveAreasAreNamedAsInSpecSection3(): void
|
||||
{
|
||||
self::assertSame('Seiten', DiviAreas::PAGES);
|
||||
self::assertSame('Bibliothek', DiviAreas::LIBRARY);
|
||||
self::assertSame('Theme Builder', DiviAreas::THEME_BUILDER);
|
||||
self::assertSame('Designsystem', DiviAreas::DESIGN);
|
||||
self::assertSame('Katalog', DiviAreas::CATALOG);
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ use LIT\MCP\Integrations\Divi\Pages\DiviPages;
|
||||
use LIT\MCP\Integrations\Divi\Pages\DynamicContentMap;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\Mirror;
|
||||
use LIT\MCP\Compatibility\Mirror;
|
||||
use LIT\MCP\Integrations\Divi\Schema\DiviModules;
|
||||
use LIT\MCP\Integrations\Divi\ThemeBuilder\DiviThemeBuilder;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
@@ -7,11 +7,11 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Abilities\Ability;
|
||||
use LIT\MCP\Abilities\DeclaresRequirements;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\DiviIntegration;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeatureGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\FeatureSets;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\RequiresDiviFeatures;
|
||||
use LIT\MCP\Integrations\WordPress\Content\ContentComposer;
|
||||
use LIT\MCP\Integrations\WordPress\Content\ContentCreateAbility;
|
||||
|
||||
@@ -5,9 +5,9 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use LIT\MCP\Abilities\ToolRefusal;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
use LogicException;
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviManifestCheck;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
|
||||
final class DiviManifestCheckTest extends TestCase
|
||||
{
|
||||
public function testCreateChecksEveryDiviManifest(): void
|
||||
{
|
||||
$code = [];
|
||||
$mirrors = [];
|
||||
foreach (DiviAdapters::manifests() as $manifest) {
|
||||
foreach ([...$manifest->calls, ...$manifest->constants] as $requirement) {
|
||||
$code[] = $manifest->area . ': ' . $requirement->label();
|
||||
}
|
||||
$mirrors = [...$mirrors, ...array_map(static fn ($mirror): string => $mirror->id, $manifest->mirrors)];
|
||||
}
|
||||
$check = DiviManifestCheck::create();
|
||||
|
||||
self::assertNotSame([], $code);
|
||||
self::assertSame(array_values(array_unique($code)), array_keys($check->codeChecks()));
|
||||
self::assertCount(count(array_unique($mirrors)), $check->mirrorChecks());
|
||||
self::assertNotSame([], $check->registrationChecks(), 'DiviModules::knowsBlock is wired for block types');
|
||||
}
|
||||
|
||||
public function testCreateLoadsTheSignatureReferences(): void
|
||||
{
|
||||
$kinds = array_map(static fn ($problem): string => $problem->kind, DiviManifestCheck::create()->codeProblems());
|
||||
|
||||
self::assertNotContains('reference-missing', $kinds);
|
||||
}
|
||||
}
|
||||
@@ -4,10 +4,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Compatibility\SignatureFingerprint;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviReference;
|
||||
use LIT\MCP\Integrations\Divi\Release\SignatureFingerprint;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use RuntimeException;
|
||||
|
||||
@@ -19,7 +19,7 @@ final class DiviReferenceTest extends TestCase
|
||||
$signatureKeys = [];
|
||||
foreach (DiviAdapters::manifests() as $manifest) {
|
||||
foreach ($manifest->calls as $call) {
|
||||
$signatureKeys[] = 'sig:' . ltrim($call->symbol, '\\');
|
||||
$signatureKeys[] = $call->signatureKey();
|
||||
}
|
||||
}
|
||||
$keys = array_values(array_unique(array_merge($mirrorIds, $signatureKeys)));
|
||||
@@ -40,10 +40,10 @@ final class DiviReferenceTest extends TestCase
|
||||
foreach (DiviAdapters::mirrors() as $mirror) {
|
||||
self::assertStringStartsNotWith(DiviReference::SIGNATURE_PREFIX, $mirror->id);
|
||||
}
|
||||
self::assertSame('sig:et_pb_is_allowed', DiviReference::signatureKey(new Call('et_pb_is_allowed', 1)));
|
||||
self::assertSame('sig:et_pb_is_allowed', (new Call('et_pb_is_allowed', 1))->signatureKey());
|
||||
self::assertSame(
|
||||
'sig:ET_Core_PageResource::remove_static_resources',
|
||||
DiviReference::signatureKey(new Call('\\ET_Core_PageResource::remove_static_resources', 3))
|
||||
(new Call('\\ET_Core_PageResource::remove_static_resources', 3))->signatureKey()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\FeatureOverview;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Tests\Support\FeatureFakeTool;
|
||||
use LIT\MCP\Tests\Support\MatrixFixtures;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
@@ -6,11 +6,13 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Abilities\WriteFailed;
|
||||
use LIT\MCP\Compatibility\Capability;
|
||||
use LIT\MCP\Compatibility\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseResolver;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\DiviFeatureFixtures;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
@@ -43,6 +45,37 @@ final class ReleaseGateTest extends TestCase
|
||||
self::assertSame('5.3.0', $lock->status->version);
|
||||
}
|
||||
|
||||
public function testALockWhoseLockedCapabilityIsNoDiviFeatureStillRefusesTheFeatureAsked(): void
|
||||
{
|
||||
$foreign = new class () implements Capability {
|
||||
public function id(): string
|
||||
{
|
||||
return DiviFeature::PageWrite->id();
|
||||
}
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return 'fremde Fähigkeit';
|
||||
}
|
||||
|
||||
public function isWrite(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
ReleaseGate::useResolver(static fn (): ReleaseStatus => ReleaseStatus::of(
|
||||
'5.3.0',
|
||||
CompatibilityMatrix::uniform([$foreign], ReleaseState::Incompatible, ['fremde Fähigkeit'])
|
||||
));
|
||||
|
||||
try {
|
||||
ReleaseGate::assertFeature(DiviFeature::PageWrite);
|
||||
self::fail('a locked feature must refuse');
|
||||
} catch (DiviLocked $locked) {
|
||||
self::assertSame([DiviFeature::PageWrite], $locked->features);
|
||||
}
|
||||
}
|
||||
|
||||
public function testAssertFeatureRefusesOnlyALockedFeature(): void
|
||||
{
|
||||
ReleaseGate::useResolver(static fn (): ReleaseStatus => ReleaseMatrices::status(
|
||||
|
||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Design\DesignSystemWriter;
|
||||
use LIT\MCP\Integrations\Divi\Library\DiviLibraryStore;
|
||||
use LIT\MCP\Integrations\Divi\Library\LibraryItemSpec;
|
||||
@@ -14,7 +15,6 @@ use LIT\MCP\Integrations\Divi\Pages\SaveScope;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviLocked;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Integrations\Divi\ThemeBuilder\DiviThemeBuilder;
|
||||
use LIT\MCP\Integrations\WordPress\Content\NewDraft;
|
||||
|
||||
@@ -6,11 +6,11 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use Brain\Monkey\Filters;
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\ManifestCheck;
|
||||
use LIT\MCP\Integrations\Divi\Release\Problem;
|
||||
use LIT\MCP\Compatibility\ManifestCheck;
|
||||
use LIT\MCP\Compatibility\Problem;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseResolver;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStore;
|
||||
use LIT\MCP\Plugin;
|
||||
|
||||
@@ -4,10 +4,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Compatibility\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\Compatibility\FeatureStatus;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\ReleaseMatrices;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
@@ -57,14 +57,14 @@ final class ReleaseStatusTest extends TestCase
|
||||
self::assertNull($status->source);
|
||||
self::assertSame(['Seiten: et_x() – Signatur geändert'], $status->problems);
|
||||
self::assertSame(['user_id' => 1], $status->release);
|
||||
self::assertSame('auto', ReleaseStatus::of('5.99.0', CompatibilityMatrix::allReleased('auto'))->source);
|
||||
self::assertSame('auto', ReleaseStatus::of('5.99.0', CompatibilityMatrix::allReleased(DiviFeature::cases(), 'auto'))->source);
|
||||
}
|
||||
|
||||
public function testAMatrixInAnotherStateThanTheStatusIsRefused(): void
|
||||
{
|
||||
$this->expectException(LogicException::class);
|
||||
|
||||
new ReleaseStatus(ReleaseState::Released, '5.2.1', 'code', [], null, CompatibilityMatrix::allIncompatible('x'));
|
||||
new ReleaseStatus(ReleaseState::Released, '5.2.1', 'code', [], null, CompatibilityMatrix::allIncompatible(DiviFeature::cases(), 'x'));
|
||||
}
|
||||
|
||||
public function testRefusalForAnUntestedFeatureNamesItAndKeepsTheOthersWorking(): void
|
||||
@@ -101,7 +101,7 @@ final class ReleaseStatusTest extends TestCase
|
||||
$features[$feature->value] = $matrix->of($feature);
|
||||
}
|
||||
$features['library-write'] = new FeatureStatus(DiviFeature::LibraryWrite, ReleaseState::Untested);
|
||||
$status = ReleaseStatus::of('5.99.0', new CompatibilityMatrix($features));
|
||||
$status = ReleaseStatus::of('5.99.0', new CompatibilityMatrix(DiviFeature::cases(), $features));
|
||||
|
||||
$payload = self::assertToolError(
|
||||
$status->refusalFor([DiviFeature::PageWrite, DiviFeature::LibraryWrite, DiviFeature::ThemeBuilderWrite]),
|
||||
|
||||
@@ -5,9 +5,9 @@ declare(strict_types=1);
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Release;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Compatibility\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseState;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Integrations\Divi\Release\WriteProbe;
|
||||
use LIT\MCP\Integrations\WordPress\Content\ContentComposer;
|
||||
|
||||
@@ -6,10 +6,10 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\Schema;
|
||||
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Integrations\Divi\Pages\DynamicContentMap;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\ConstantRequirement;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Compatibility\ConstantRequirement;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\Schema\DiviModules;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
|
||||
@@ -19,8 +19,8 @@ final class DiviModulesTest extends TestCase
|
||||
{
|
||||
self::assertContains(DiviModules::class, DiviAdapters::CLASSES);
|
||||
self::assertContains(DynamicContentMap::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::CATALOG, DiviModules::manifest()->area);
|
||||
self::assertSame(Manifest::CATALOG, DynamicContentMap::manifest()->area);
|
||||
self::assertSame(DiviAreas::CATALOG, DiviModules::manifest()->area);
|
||||
self::assertSame(DiviAreas::CATALOG, DynamicContentMap::manifest()->area);
|
||||
}
|
||||
|
||||
public function testManifestListsModuleRegistrationAndTheBuilderSwitch(): void
|
||||
|
||||
@@ -7,9 +7,9 @@ namespace LIT\MCP\Tests\Unit\Integrations\Divi\ThemeBuilder;
|
||||
use Brain\Monkey\Actions;
|
||||
use Brain\Monkey\Filters;
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Compatibility\Call;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAdapters;
|
||||
use LIT\MCP\Integrations\Divi\Release\Manifest;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviAreas;
|
||||
use LIT\MCP\Integrations\Divi\ThemeBuilder\DiviThemeBuilder;
|
||||
use LIT\MCP\Integrations\Divi\ThemeBuilder\InsertedBeforeFailure;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
@@ -25,7 +25,7 @@ final class DiviThemeBuilderTest extends TestCase
|
||||
$manifest = DiviThemeBuilder::manifest();
|
||||
|
||||
self::assertContains(DiviThemeBuilder::class, DiviAdapters::CLASSES);
|
||||
self::assertSame(Manifest::THEME_BUILDER, $manifest->area);
|
||||
self::assertSame(DiviAreas::THEME_BUILDER, $manifest->area);
|
||||
self::assertSame(DiviThemeBuilder::postTypes(), $manifest->postTypes);
|
||||
self::assertSame(
|
||||
['tb-api-save', 'tb-store-template', 'tb-load-setting-options'],
|
||||
|
||||
@@ -6,7 +6,8 @@ namespace LIT\MCP\Tests\Unit;
|
||||
|
||||
use Brain\Monkey;
|
||||
use Brain\Monkey\Functions;
|
||||
use LIT\MCP\Integrations\Divi\Release\CompatibilityMatrix;
|
||||
use LIT\MCP\Compatibility\CompatibilityMatrix;
|
||||
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseGate;
|
||||
use LIT\MCP\Integrations\Divi\Release\ReleaseStatus;
|
||||
use LIT\MCP\Tests\Support\AssertsToolErrors;
|
||||
@@ -41,7 +42,7 @@ abstract class TestCase extends BaseTestCase
|
||||
|
||||
// Every Divi feature is released unless a test says otherwise (the gate would ask WordPress and Divi).
|
||||
ReleaseGate::useResolver(
|
||||
static fn (): ReleaseStatus => ReleaseStatus::of('5.2.1', CompatibilityMatrix::allReleased())
|
||||
static fn (): ReleaseStatus => ReleaseStatus::of('5.2.1', CompatibilityMatrix::allReleased(DiviFeature::cases()))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user