All-or-nothing writes: validation (fields, terms, featured image, parent, template) before any write; failed extras delete the new draft (create) or restore revision, old columns, fields, terms and featured image (update). content-update requires rev; Rev::ofPost covers content, title, excerpt, status and post_modified_gmt. MetaFieldSource::write() now throws on failure. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
49 lines
1.7 KiB
PHP
49 lines
1.7 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace LIT\MCP\Tests\Unit\Integrations\WordPress;
|
||
|
||
use LIT\MCP\Abilities\Ability;
|
||
use LIT\MCP\ChangeLog\ChangeLog;
|
||
use LIT\MCP\Integrations\WordPress\Schema\ContentSchema;
|
||
use LIT\MCP\Integrations\WordPress\WordPressIntegration;
|
||
use LIT\MCP\Tests\Unit\TestCase;
|
||
use Mockery;
|
||
|
||
final class WordPressIntegrationTest extends TestCase
|
||
{
|
||
/** Grows with every task that adds abilities – keep in the order of abilities(). */
|
||
private const EXPECTED = [
|
||
'lit/content-types',
|
||
'lit/content-query',
|
||
'lit/content-get',
|
||
'lit/content-create',
|
||
'lit/content-update',
|
||
];
|
||
|
||
public function testProvidesTheWordPressAbilitiesInOrder(): void
|
||
{
|
||
$integration = new WordPressIntegration(Mockery::mock(ContentSchema::class), Mockery::mock(ChangeLog::class));
|
||
|
||
self::assertSame('wordpress', $integration->id());
|
||
self::assertTrue($integration->isAvailable());
|
||
self::assertSame(
|
||
self::EXPECTED,
|
||
array_map(static fn (Ability $ability): string => $ability->name(), $integration->abilities())
|
||
);
|
||
}
|
||
|
||
public function testEveryAbilityHasAnObjectInputSchemaThatRejectsUnknownKeys(): void
|
||
{
|
||
$integration = new WordPressIntegration(Mockery::mock(ContentSchema::class), Mockery::mock(ChangeLog::class));
|
||
|
||
foreach ($integration->abilities() as $ability) {
|
||
$schema = $ability->inputSchema();
|
||
self::assertSame('object', $schema['type'], $ability->name());
|
||
self::assertFalse($schema['additionalProperties'], $ability->name());
|
||
self::assertMatchesRegularExpression('#^lit/[a-z]+(-[a-z]+)+$#', $ability->name());
|
||
}
|
||
}
|
||
}
|