Files
WP-LIT-MCP/tests/Unit/Abilities/ToolResultTest.php
T

77 lines
2.8 KiB
PHP

<?php
declare(strict_types=1);
namespace LIT\MCP\Tests\Unit\Abilities;
use InvalidArgumentException;
use LIT\MCP\Abilities\ToolResult;
use LIT\MCP\Tests\Unit\TestCase;
final class ToolResultTest extends TestCase
{
public function testDefaultsMatchTheSpecShape(): void
{
self::assertSame(
[
'ok' => true,
'summary' => 'Seite angelegt',
'changed' => [],
'outline' => null,
'rev' => null,
'warnings' => [],
'revision_id' => null,
'snapshot_id' => null,
'log_id' => null,
'preview_url' => null,
'edit_url' => null,
],
ToolResult::ok('Seite angelegt')->toArray()
);
}
public function testBuilderFillsAllFieldsAndExtras(): void
{
$result = ToolResult::ok('Aktualisiert')
->changed('12', 'page', 'updated', 'Startseite')
->warning('Bild ohne Alt-Text')
->warnings(['Zweite Warnung'])
->outline('Hero')
->rev('a1b2c3d4e5f6')
->revisionId(812)
->snapshotId('snap-1')
->logId(4711)
->urls('https://kunde.de/?p=12&preview=true', 'https://kunde.de/wp-admin/post.php?post=12&action=edit')
->with('previous', ['blogname' => 'Alt'])
->toArray();
self::assertSame([['id' => '12', 'type' => 'page', 'action' => 'updated', 'label' => 'Startseite']], $result['changed']);
self::assertSame(['Bild ohne Alt-Text', 'Zweite Warnung'], $result['warnings']);
self::assertSame('Hero', $result['outline']);
self::assertSame('a1b2c3d4e5f6', $result['rev']);
self::assertSame(812, $result['revision_id']);
self::assertSame('snap-1', $result['snapshot_id']);
self::assertSame(4711, $result['log_id']);
self::assertSame('https://kunde.de/?p=12&preview=true', $result['preview_url']);
self::assertSame(['blogname' => 'Alt'], $result['previous']);
}
public function testReservedKeysCannotBeOverwrittenByExtras(): void
{
$this->expectException(InvalidArgumentException::class);
ToolResult::ok('x')->with('ok', false);
}
public function testSchemaRequiresCoreKeysAndAcceptsExtraProperties(): void
{
$schema = ToolResult::schema(['previous' => ['type' => 'object']], ['previous']);
self::assertSame('object', $schema['type']);
self::assertContains('summary', $schema['required']);
self::assertContains('previous', $schema['required']);
self::assertSame(['integer', 'null'], $schema['properties']['revision_id']['type']);
self::assertSame(['type' => 'object'], $schema['properties']['previous']);
}
}