Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
78 lines
3.5 KiB
PHP
78 lines
3.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace LIT\MCP\Tests\Unit\Admin;
|
|
|
|
use Brain\Monkey\Functions;
|
|
use LIT\MCP\Admin\ConnectionStatus;
|
|
use LIT\MCP\Admin\ConnectionTab;
|
|
use LIT\MCP\Tests\Unit\TestCase;
|
|
use Mockery;
|
|
|
|
final class ConnectionTabTest extends TestCase
|
|
{
|
|
/** @param list<array{label: string, ok: ?bool, message: string}> $checks */
|
|
private function render(array $checks): string
|
|
{
|
|
Functions\stubEscapeFunctions();
|
|
Functions\stubTranslationFunctions();
|
|
Functions\when('rest_url')->justReturn('https://kunde.de/wp-json/mcp/mcp-oauth-server');
|
|
Functions\when('admin_url')->alias(static fn (string $path = ''): string => 'https://kunde.de/wp-admin/' . $path);
|
|
Functions\when('add_query_arg')->alias(static fn (array $args, string $url): string => $url . '?' . http_build_query($args));
|
|
$status = Mockery::mock(ConnectionStatus::class);
|
|
$status->allows('checks')->with(true)->andReturn($checks);
|
|
|
|
ob_start();
|
|
(new ConnectionTab($status))->render();
|
|
|
|
return (string) ob_get_clean();
|
|
}
|
|
|
|
public function testExplainsTheConnectionAsAnOrderedSequenceLinkingToTheAccessTab(): void
|
|
{
|
|
$html = $this->render([]);
|
|
|
|
self::assertStringContainsString('So verbindest du einen KI-Assistenten', $html);
|
|
self::assertSame(3, substr_count($html, '<li>'));
|
|
self::assertStringContainsString('<ol', $html);
|
|
self::assertStringContainsString('MCP-Server (Connector)', $html);
|
|
self::assertStringNotContainsString('claude', strtolower($html));
|
|
self::assertStringContainsString('href="https://kunde.de/wp-admin/options-general.php?page=lit-mcp&tab=zugriff"', $html);
|
|
}
|
|
|
|
public function testServerUrlIsReadonlyWithACopyButton(): void
|
|
{
|
|
$html = $this->render([]);
|
|
|
|
self::assertMatchesRegularExpression(
|
|
'#<input[^>]+id="lit-mcp-url"[^>]+readonly[^>]+value="https://kunde.de/wp-json/mcp/mcp-oauth-server"#',
|
|
$html
|
|
);
|
|
self::assertStringContainsString('<label for="lit-mcp-url"', $html);
|
|
self::assertStringContainsString(
|
|
'<button type="button" class="button lit-mcp-copy" data-clipboard-target="#lit-mcp-url">URL kopieren</button>',
|
|
$html
|
|
);
|
|
self::assertStringContainsString('<span class="success hidden" aria-hidden="true">Kopiert!</span>', $html);
|
|
}
|
|
|
|
public function testStatusIsASiteHealthStyleListWithIconsPerState(): void
|
|
{
|
|
$html = $this->render([
|
|
['label' => 'HTTPS', 'ok' => true, 'message' => 'aktiv'],
|
|
['label' => 'Discovery', 'ok' => null, 'message' => 'noch nicht geprüft'],
|
|
['label' => 'OAuth <b>', 'ok' => false, 'message' => 'deaktiviert'],
|
|
]);
|
|
|
|
self::assertStringNotContainsString('<table', $html);
|
|
self::assertStringContainsString('<ul class="lit-mcp-status">', $html);
|
|
self::assertMatchesRegularExpression('#dashicons-yes-alt[^<]*"[^>]*></span>.*?HTTPS#s', $html);
|
|
self::assertMatchesRegularExpression('#dashicons-warning[^<]*"[^>]*></span>.*?Discovery#s', $html);
|
|
self::assertMatchesRegularExpression('#dashicons-dismiss[^<]*"[^>]*></span>.*?OAuth <b>#s', $html);
|
|
self::assertStringContainsString('<span class="screen-reader-text">In Ordnung:</span>', $html);
|
|
self::assertStringContainsString('<span class="screen-reader-text">Problem:</span>', $html);
|
|
self::assertStringContainsString('href="https://kunde.de/wp-admin/site-health.php"', $html);
|
|
}
|
|
}
|