feat: change log table with retention cron and limits option

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
This commit is contained in:
2026-09-25 21:58:15 +02:00
co-authored by Claude Opus 5.5
parent 1df655a74e
commit 261972751f
14 changed files with 593 additions and 0 deletions
@@ -0,0 +1,40 @@
<?php
declare(strict_types=1);
namespace LIT\MCP\Tests\Unit\ChangeLog;
use Brain\Monkey\Functions;
use LIT\MCP\ChangeLog\ChangeLog;
use LIT\MCP\ChangeLog\ChangeLogCleanup;
use LIT\MCP\Limits;
use LIT\MCP\Tests\Unit\TestCase;
use Mockery;
final class ChangeLogCleanupTest extends TestCase
{
public function testRunPurgesWithTheConfiguredRetention(): void
{
Functions\when('get_option')->justReturn(['log_retention_days' => 30]);
$log = Mockery::mock(ChangeLog::class);
$log->expects('purgeOlderThan')->with(30)->andReturn(0);
(new ChangeLogCleanup($log, new Limits()))->run();
}
public function testEnsureScheduledSchedulesADailyEventOnce(): void
{
Functions\when('wp_next_scheduled')->justReturn(false);
Functions\expect('wp_schedule_event')->once()->with(Mockery::type('int'), 'daily', 'lit_mcp_log_cleanup');
(new ChangeLogCleanup(Mockery::mock(ChangeLog::class), new Limits()))->ensureScheduled();
}
public function testEnsureScheduledDoesNothingWhenAlreadyScheduled(): void
{
Functions\when('wp_next_scheduled')->justReturn(1790330400);
Functions\expect('wp_schedule_event')->never();
(new ChangeLogCleanup(Mockery::mock(ChangeLog::class), new Limits()))->ensureScheduled();
}
}