One PostIdParser for {{link:}} and select_post; post_link_url_<type> needs a
living, readable, non-attachment target of exactly that type.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
44 lines
2.1 KiB
PHP
44 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Pages;
|
|
|
|
use Brain\Monkey\Functions;
|
|
use LIT\MCP\Integrations\Divi\Pages\WpLinkTargets;
|
|
use LIT\MCP\Tests\Unit\TestCase;
|
|
use WP_Post;
|
|
|
|
final class WpLinkTargetsTest extends TestCase
|
|
{
|
|
public function testOnlyReadableLivingPostsCanBeLinked(): void
|
|
{
|
|
$posts = [
|
|
839 => new WP_Post(['ID' => 839, 'post_type' => 'page', 'post_status' => 'draft']),
|
|
841 => new WP_Post(['ID' => 841, 'post_type' => 'page', 'post_status' => 'trash']),
|
|
842 => new WP_Post(['ID' => 842, 'post_type' => 'page', 'post_status' => 'private']),
|
|
843 => new WP_Post(['ID' => 843, 'post_type' => 'revision', 'post_status' => 'inherit']),
|
|
844 => new WP_Post(['ID' => 844, 'post_type' => 'page', 'post_status' => 'auto-draft']),
|
|
845 => new WP_Post(['ID' => 845, 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_parent' => 0]),
|
|
846 => new WP_Post(['ID' => 846, 'post_type' => 'attachment', 'post_status' => 'trash']),
|
|
847 => new WP_Post(['ID' => 847, 'post_type' => 'attachment', 'post_status' => 'private']),
|
|
];
|
|
Functions\when('get_post')->alias(static fn (int $id): ?WP_Post => $posts[$id] ?? null);
|
|
Functions\when('current_user_can')->alias(
|
|
static fn (string $cap, int $id): bool => $cap === 'read_post' && $id !== 842
|
|
);
|
|
|
|
$links = new WpLinkTargets();
|
|
|
|
self::assertSame('page', $links->postTypeOf(839));
|
|
self::assertNull($links->postTypeOf(841), 'trashed');
|
|
self::assertNull($links->postTypeOf(842), 'not readable');
|
|
self::assertNull($links->postTypeOf(843), 'revision');
|
|
self::assertNull($links->postTypeOf(844), 'auto-draft');
|
|
self::assertNull($links->postTypeOf(900), 'missing');
|
|
self::assertNull($links->postTypeOf(845), 'unattached attachment');
|
|
self::assertNull($links->postTypeOf(846), 'trashed attachment');
|
|
self::assertNull($links->postTypeOf(847), 'attachment with an own status (ruling P10: no attachment)');
|
|
}
|
|
}
|