lit/cache-clear leert den Seiten-Cache von WP Super Cache für die ganze Website (scope all, Recht manage_options) oder einen Beitrag (scope post, Recht edit_post); Probelauf ohne confirm, Ausführen mit confirm: true. Das CapabilityGate sperrt das Tool, wenn WP Super Cache bricht; eine Sperre zur Laufzeit wird als Fehler gemeldet. Listener und Tool teilen die 30-s-Drosselung mit Nachlauf (SuperCachePurger); der Listener ignoriert die Einträge des Tools. Behoben vor dem Commit: die Verdrahtung des Purgers erfasste die Registry zu früh (immer gesperrt), jetzt per Referenz und mit Test über Plugin::integrations(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
76 lines
3.2 KiB
PHP
76 lines
3.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace LIT\MCP\Tests\Unit\Integrations\SuperCache;
|
|
|
|
use Brain\Monkey\Functions;
|
|
use LIT\MCP\Admin\CompatibilityTab;
|
|
use LIT\MCP\Compatibility\ProvidesCompatibility;
|
|
use LIT\MCP\Integrations\Bootable;
|
|
use LIT\MCP\Integrations\Integration;
|
|
use LIT\MCP\Integrations\SuperCache\SuperCacheCompatibility;
|
|
use LIT\MCP\Integrations\SuperCache\SuperCacheIntegration;
|
|
use LIT\MCP\Integrations\SuperCache\SuperCachePurger;
|
|
use LIT\MCP\Tests\Support\FakeChangeLog;
|
|
use LIT\MCP\Tests\Unit\TestCase;
|
|
|
|
final class SuperCacheIntegrationTest extends TestCase
|
|
{
|
|
private static function purger(): SuperCachePurger
|
|
{
|
|
return new SuperCachePurger(static fn (): bool => true);
|
|
}
|
|
|
|
public function testIsAnIntegrationThatProvidesItsProfileAndTheCacheClearTool(): void
|
|
{
|
|
$integration = new SuperCacheIntegration(null, self::purger(), FakeChangeLog::forbidden());
|
|
|
|
self::assertInstanceOf(Integration::class, $integration);
|
|
self::assertInstanceOf(ProvidesCompatibility::class, $integration);
|
|
self::assertSame('wpsc', $integration->id());
|
|
self::assertSame('WP Super Cache', $integration->label());
|
|
self::assertEquals(['lit/cache-clear'], array_map(static fn ($a): string => $a->name(), $integration->abilities()));
|
|
self::assertEquals([SuperCacheCompatibility::profile()], $integration->compatibilities());
|
|
}
|
|
|
|
public function testIsAvailableOnlyWithSuperCache(): void
|
|
{
|
|
self::assertSame(defined('WPCACHEHOME'), (new SuperCacheIntegration(null, self::purger(), FakeChangeLog::forbidden()))->isAvailable());
|
|
}
|
|
|
|
public function testBootHooksTheOrphanCleanupIntoTheProfileLoad(): void
|
|
{
|
|
$integration = new SuperCacheIntegration(null, self::purger(), FakeChangeLog::forbidden());
|
|
$integration->boot();
|
|
|
|
self::assertInstanceOf(Bootable::class, $integration);
|
|
self::assertNotFalse(has_action(CompatibilityTab::LOAD_ACTION, [$integration, 'removeOrphans']));
|
|
}
|
|
|
|
public function testNoCleanupForAnotherProfileWithoutWpscOrWithoutTheCapability(): void
|
|
{
|
|
Functions\expect('get_posts')->never();
|
|
Functions\when('current_user_can')->justReturn(true);
|
|
(new SuperCacheIntegration(static fn (): bool => true, self::purger(), FakeChangeLog::forbidden()))->removeOrphans('pods');
|
|
(new SuperCacheIntegration(static fn (): bool => false, self::purger(), FakeChangeLog::forbidden()))->removeOrphans('wpsc');
|
|
|
|
Functions\when('current_user_can')->justReturn(false);
|
|
(new SuperCacheIntegration(static fn (): bool => true, self::purger(), FakeChangeLog::forbidden()))->removeOrphans('wpsc');
|
|
$this->addToAssertionCount(1);
|
|
}
|
|
|
|
public function testCleansUpPagesForTheAdministratorWithWpsc(): void
|
|
{
|
|
Functions\when('current_user_can')->justReturn(true);
|
|
Functions\expect('get_posts')->once()->andReturnUsing(static function (array $args): array {
|
|
self::assertSame('page', $args['post_type']);
|
|
self::assertSame(['draft', 'private'], $args['post_status']);
|
|
|
|
return [];
|
|
});
|
|
|
|
(new SuperCacheIntegration(static fn (): bool => true, self::purger(), FakeChangeLog::forbidden()))->removeOrphans('wpsc');
|
|
}
|
|
}
|