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,37 @@
<?php
declare(strict_types=1);
namespace LIT\MCP\Tests\Unit\ChangeLog;
use Brain\Monkey\Functions;
use LIT\MCP\ChangeLog\ChangeLog;
use LIT\MCP\ChangeLog\ChangeLogInstaller;
use LIT\MCP\Tests\Unit\TestCase;
use Mockery;
final class ChangeLogInstallerTest extends TestCase
{
public function testInstallCreatesTheTableAndStoresTheVersion(): void
{
$db = Mockery::mock(\wpdb::class)->makePartial();
Functions\expect('dbDelta')->once()->with(Mockery::on(static function (string $sql): bool {
return str_contains($sql, 'CREATE TABLE wp_lit_mcp_log (')
&& str_contains($sql, 'client varchar(191)')
&& str_contains($sql, 'revision_id bigint(20) unsigned DEFAULT NULL')
&& str_contains($sql, 'snapshot_id varchar(64) DEFAULT NULL')
&& str_contains($sql, 'PRIMARY KEY (id)');
}));
Functions\expect('update_option')->once()->with('lit_mcp_db_version', '1');
(new ChangeLogInstaller(new ChangeLog($db)))->install();
}
public function testMaybeInstallSkipsWhenTheVersionIsCurrent(): void
{
Functions\when('get_option')->justReturn('1');
Functions\expect('dbDelta')->never();
(new ChangeLogInstaller(new ChangeLog(Mockery::mock(\wpdb::class)->makePartial())))->maybeInstall();
}
}