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('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('canUseVisualBuilder')->andReturn(true); $variables = Mockery::mock(GlobalVariablesAdapter::class); $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('canUseVisualBuilder')->andReturn(false); $variables = Mockery::mock(GlobalVariablesAdapter::class); $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']); } }