fix(audit L4): Restore-Planer für Farben, Variablen und Presets berechnen die Fundstellen (affected, P8a blocked_ids) für geänderte, entfernte und deaktivierte Einträge

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Jan-Niclas Loosen
2026-10-20 00:03:28 +02:00
co-authored by Claude Sonnet 5.5
parent 4a8a889f93
commit bd80ab1394
10 changed files with 274 additions and 26 deletions
@@ -11,7 +11,10 @@ use LIT\MCP\Integrations\Divi\Design\GlobalVariablesAdapter;
use LIT\MCP\Integrations\Divi\Design\VariableArea;
use LIT\MCP\Integrations\Divi\Design\VariableBook;
use LIT\MCP\Integrations\Divi\Design\VariableRestorePlanner;
use LIT\MCP\Integrations\Divi\Design\ReferenceUsageQuery;
use LIT\MCP\Integrations\Divi\Library\GlobalUsages;
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
use LIT\MCP\Tests\Support\UsageFixture;
use LIT\MCP\Tests\Unit\TestCase;
use Mockery;
@@ -41,14 +44,14 @@ final class VariableRestorePlannerTest extends TestCase
return ['numbers' => ['gvid-radius0001' => self::number('gvid-radius0001', 'Eckenradius', '4px')]];
}
private static function planner(bool $manage = true): VariableRestorePlanner
private static function planner(bool $manage = true, ?GlobalUsages $usages = null): VariableRestorePlanner
{
$writer = Mockery::mock(DesignSystemWriter::class);
$writer->allows('canUseVisualBuilder')->andReturn(true);
$variables = Mockery::mock(GlobalVariablesAdapter::class);
$variables->allows('canManage')->andReturn($manage);
return new VariableRestorePlanner($writer, $variables);
return new VariableRestorePlanner($writer, $variables, $usages ?? UsageFixture::none());
}
public function testAreaFeaturesAndDesignArea(): void
@@ -89,4 +92,19 @@ final class VariableRestorePlannerTest extends TestCase
$plan->warnings
);
}
/** Audit L4: changed and archived variables are looked up; the plan carries the report for P8a. */
public function testReportsThePagesUsingChangedOrArchivedVariables(): void
{
$usages = Mockery::mock(GlobalUsages::class);
$usages->expects('reportFor')->once()->with(Mockery::on(
static fn (mixed $query): bool => $query instanceof ReferenceUsageQuery
&& $query->matches('gvid-radius0001') && $query->matches('gvid-neu0000001')
))->andReturn(UsageFixture::blockedReport());
$plan = self::planner(true, $usages)->plan(self::current(), self::snapshot(), self::SNAPSHOT_ID);
self::assertInstanceOf(DesignPlan::class, $plan);
self::assertTrue($plan->usages?->blocks());
}
}