Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
77 lines
3.3 KiB
PHP
77 lines
3.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
|
|
|
use LIT\MCP\Integrations\Divi\Design\DesignSystemWriter;
|
|
use LIT\MCP\Integrations\Divi\Design\PresetArea;
|
|
use LIT\MCP\Integrations\Divi\Design\PresetBook;
|
|
use LIT\MCP\Integrations\Divi\Release\DiviFeature;
|
|
use LIT\MCP\Tests\Unit\TestCase;
|
|
use Mockery;
|
|
|
|
final class PresetAreaTest extends TestCase
|
|
{
|
|
public function testWritesTheRestFormatAndReadsBack(): void
|
|
{
|
|
$writer = Mockery::mock(DesignSystemWriter::class);
|
|
$stored = PresetBookTest::stored();
|
|
$writer->allows('presets')->andReturn($stored);
|
|
$writer->expects('savePresets')
|
|
->with(PresetBook::fromDivi($stored)->toRest(), true)
|
|
->andReturn($stored);
|
|
$area = new PresetArea($writer);
|
|
|
|
self::assertSame(['presets', 'Presets'], [$area->name(), $area->label()]);
|
|
self::assertSame(DiviFeature::PresetWrite, $area->feature());
|
|
self::assertSame(PresetBook::fromDivi($stored)->data(), $area->raw());
|
|
self::assertSame(PresetBook::fromDivi($stored)->rev(), $area->rev($stored));
|
|
self::assertSame(PresetBook::fromDivi($stored)->data(), $area->write($stored, true));
|
|
}
|
|
|
|
public function testVerifyIgnoresSanitizedValuesButNotMissingPresets(): void
|
|
{
|
|
$area = new PresetArea(Mockery::mock(DesignSystemWriter::class));
|
|
$expected = PresetBookTest::stored();
|
|
$sanitized = $expected;
|
|
$sanitized['module']['divi/button']['items']['aaaaaaaaaa']['attrs'] = ['button' => ['x' => 'bereinigt']];
|
|
$missing = $expected;
|
|
unset($missing['module']['divi/button']['items']['bbbbbbbbbb']);
|
|
$otherDefault = $expected;
|
|
$otherDefault['module']['divi/text']['default'] = '';
|
|
|
|
self::assertTrue($area->verify($expected, $sanitized));
|
|
self::assertFalse($area->verify($expected, $missing));
|
|
self::assertFalse($area->verify($expected, $otherDefault));
|
|
}
|
|
|
|
/** Final review I-3a: a snapshot is written back with full-replace semantics. */
|
|
public function testRestoreReplacesTheWholeInventory(): void
|
|
{
|
|
$writer = Mockery::mock(DesignSystemWriter::class);
|
|
$stored = PresetBookTest::stored();
|
|
$writer->expects('savePresets')->with(PresetBook::fromDivi($stored)->toRest(), true)->andReturn($stored);
|
|
|
|
self::assertSame(PresetBook::fromDivi($stored)->data(), (new PresetArea($writer))->restore($stored));
|
|
}
|
|
|
|
/** Final review I-3b: values Divi changed while saving, by preset name; structure is verify()'s job. */
|
|
public function testDifferencesNameThePresetsDiviSanitized(): void
|
|
{
|
|
$area = new PresetArea(Mockery::mock(DesignSystemWriter::class));
|
|
$expected = PresetBookTest::stored();
|
|
$sanitized = $expected;
|
|
$sanitized['module']['divi/button']['items']['aaaaaaaaaa']['attrs'] = ['button' => ['x' => 'bereinigt']];
|
|
$missing = $expected;
|
|
unset($missing['module']['divi/button']['items']['bbbbbbbbbb']);
|
|
|
|
self::assertSame([], $area->differences($expected, $expected));
|
|
self::assertSame([], $area->differences($expected, $missing));
|
|
self::assertSame(
|
|
['Divi hat die Einstellungen von Preset „CTA primär“ beim Speichern bereinigt.'],
|
|
$area->differences($expected, $sanitized)
|
|
);
|
|
}
|
|
}
|