Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
124 lines
6.2 KiB
PHP
124 lines
6.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Design;
|
|
|
|
use Brain\Monkey\Functions;
|
|
use LIT\MCP\Integrations\Divi\Design\DesignRights;
|
|
use LIT\MCP\Integrations\Divi\Design\DesignSystemWriter;
|
|
use LIT\MCP\Integrations\Divi\Design\FontCatalog;
|
|
use LIT\MCP\Integrations\Divi\Design\GlobalVariablesAdapter;
|
|
use LIT\MCP\Integrations\Divi\Design\ThemeOptionsAdapter;
|
|
use LIT\MCP\Tests\Unit\TestCase;
|
|
use Mockery;
|
|
|
|
final class DesignRightsTest extends TestCase
|
|
{
|
|
public function testPresetsNeedEditThemeOptionsAndTheVisualBuilder(): void
|
|
{
|
|
$writer = Mockery::mock(DesignSystemWriter::class);
|
|
$writer->allows('refresh');
|
|
$writer->allows('canUseVisualBuilder')->andReturn(true, false);
|
|
Functions\when('current_user_can')->alias(static fn (string $cap): bool => $cap === 'edit_theme_options');
|
|
|
|
self::assertNull(DesignRights::presets($writer));
|
|
$refusal = self::assertToolError(DesignRights::presets($writer), 'forbidden');
|
|
self::assertStringContainsString('Visual Builder', $refusal['message']);
|
|
|
|
Functions\when('current_user_can')->justReturn(false);
|
|
$refusal = self::assertToolError(DesignRights::presets($writer), 'forbidden');
|
|
self::assertStringContainsString('edit_theme_options', $refusal['message']);
|
|
}
|
|
|
|
public function testColorsNeedEditThemeOptionsAndTheVisualBuilder(): void
|
|
{
|
|
$writer = Mockery::mock(DesignSystemWriter::class);
|
|
$writer->allows('refresh');
|
|
$writer->allows('canUseVisualBuilder')->andReturn(true, false);
|
|
Functions\when('current_user_can')->alias(static fn (string $cap): bool => $cap === 'edit_theme_options');
|
|
|
|
self::assertNull(DesignRights::colors($writer));
|
|
$refusal = self::assertToolError(DesignRights::colors($writer), 'forbidden');
|
|
self::assertStringContainsString('keine Farben', $refusal['message']);
|
|
|
|
Functions\when('current_user_can')->justReturn(false);
|
|
$refusal = self::assertToolError(DesignRights::colors($writer), 'forbidden');
|
|
self::assertStringContainsString('Farben ändern erfordert', $refusal['message']);
|
|
self::assertStringContainsString('edit_theme_options', $refusal['message']);
|
|
}
|
|
|
|
public function testVariablesAlsoNeedTheVariablesManager(): void
|
|
{
|
|
$writer = Mockery::mock(DesignSystemWriter::class);
|
|
$writer->allows('refresh');
|
|
$writer->allows('canUseVisualBuilder')->andReturn(true);
|
|
$variables = Mockery::mock(GlobalVariablesAdapter::class);
|
|
$variables->allows('refresh');
|
|
$variables->allows('canManage')->andReturn(true, false);
|
|
Functions\when('current_user_can')->alias(static fn (string $cap): bool => $cap === 'edit_theme_options');
|
|
|
|
self::assertNull(DesignRights::variables($writer, $variables));
|
|
$refusal = self::assertToolError(DesignRights::variables($writer, $variables), 'forbidden');
|
|
self::assertStringContainsString('Variablen-Manager', $refusal['message']);
|
|
self::assertStringContainsString('Rollen-Editor', $refusal['hint']);
|
|
}
|
|
|
|
public function testVariablesAskTheThemeRightAndTheVisualBuilderFirst(): void
|
|
{
|
|
$writer = Mockery::mock(DesignSystemWriter::class);
|
|
$writer->allows('refresh');
|
|
$writer->allows('canUseVisualBuilder')->andReturn(false);
|
|
$variables = Mockery::mock(GlobalVariablesAdapter::class);
|
|
$variables->allows('refresh');
|
|
$variables->allows('canManage')->andReturn(true);
|
|
Functions\when('current_user_can')->justReturn(true);
|
|
|
|
$refusal = self::assertToolError(DesignRights::variables($writer, $variables), 'forbidden');
|
|
self::assertStringContainsString('keine Variablen', $refusal['message']);
|
|
|
|
Functions\when('current_user_can')->justReturn(false);
|
|
$refusal = self::assertToolError(DesignRights::variables($writer, $variables), 'forbidden');
|
|
self::assertStringContainsString('Variablen ändern erfordert', $refusal['message']);
|
|
}
|
|
|
|
public function testThemeOptionsNeedEditThemeOptionsAndTheThemeCustomizerRight(): void
|
|
{
|
|
$options = Mockery::mock(ThemeOptionsAdapter::class);
|
|
$options->allows('canCustomize')->andReturn(true, false);
|
|
Functions\when('current_user_can')->alias(static fn (string $cap): bool => $cap === 'edit_theme_options');
|
|
|
|
self::assertNull(DesignRights::themeOptions($options));
|
|
$refusal = self::assertToolError(DesignRights::themeOptions($options), 'forbidden');
|
|
self::assertStringContainsString('Theme-Anpassung', $refusal['message']);
|
|
self::assertStringContainsString('keine Theme-Optionen', $refusal['message']);
|
|
self::assertStringContainsString('Rollen-Editor', $refusal['hint']);
|
|
|
|
Functions\when('current_user_can')->justReturn(false);
|
|
$refusal = self::assertToolError(DesignRights::themeOptions($options), 'forbidden');
|
|
self::assertStringContainsString('Theme-Optionen ändern erfordert', $refusal['message']);
|
|
self::assertStringContainsString('edit_theme_options', $refusal['message']);
|
|
}
|
|
|
|
public function testFontsNeedUploadFilesEditThemeOptionsAndTheFontsRight(): void
|
|
{
|
|
$fonts = Mockery::mock(FontCatalog::class);
|
|
$fonts->allows('canManage')->andReturn(true, false);
|
|
Functions\when('current_user_can')->justReturn(true);
|
|
|
|
self::assertNull(DesignRights::fonts($fonts));
|
|
$refusal = self::assertToolError(DesignRights::fonts($fonts), 'forbidden');
|
|
self::assertStringContainsString('Eigene Schriften verwalten', $refusal['message']);
|
|
self::assertStringContainsString('Rollen-Editor', $refusal['hint']);
|
|
|
|
Functions\when('current_user_can')->alias(static fn (string $cap): bool => $cap === 'edit_theme_options');
|
|
$refusal = self::assertToolError(DesignRights::fonts($fonts), 'forbidden');
|
|
self::assertStringContainsString('upload_files', $refusal['message']);
|
|
|
|
Functions\when('current_user_can')->alias(static fn (string $cap): bool => $cap === 'upload_files');
|
|
$refusal = self::assertToolError(DesignRights::fonts($fonts), 'forbidden');
|
|
self::assertStringContainsString('Schriften hochladen erfordert', $refusal['message']);
|
|
self::assertStringContainsString('edit_theme_options', $refusal['message']);
|
|
}
|
|
}
|