Files

48 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace LIT\MCP\Tests\Unit\Integrations\Divi\Library;
use LIT\MCP\Integrations\Divi\Design\ModuleUsageQuery;
use LIT\MCP\Integrations\Divi\Design\PresetUsageQuery;
use LIT\MCP\Integrations\Divi\Library\LibraryUsageQuery;
use LIT\MCP\Integrations\Divi\Library\UsageQuery;
use LIT\MCP\Tests\Unit\TestCase;
use Mockery;
final class LibraryUsageQueryTest extends TestCase
{
/** The one fail-closed pattern for JSON-escaped letters (two backslashes, "u00", a letter range). */
public function testEscapedLetterPatternIsPinned(): void
{
self::assertSame(str_repeat(chr(92), 2) . 'u00[4-7][0-9a-fA-F]', UsageQuery::ESCAPED_LETTER_REGEX);
self::assertSame(UsageQuery::ESCAPED_LETTER_REGEX, ModuleUsageQuery::ESCAPED_LETTER_REGEX);
self::assertSame(UsageQuery::ESCAPED_LETTER_REGEX, PresetUsageQuery::ESCAPED_LETTER_REGEX);
}
public function testConditionIsTheFormerCandidateFilter(): void
{
$db = Mockery::mock(\wpdb::class);
$db->allows('esc_like')->andReturnUsing(static fn (string $text): string => $text);
$db->expects('prepare')
->with(
'(LOWER(post_content) LIKE %s OR LOWER(post_content) LIKE %s OR post_content REGEXP %s)',
'%globalmodule%',
'%global_module%',
'\\\\u00[4-7][0-9a-fA-F]'
)
->andReturn('(prepared)');
self::assertSame('(prepared)', (new LibraryUsageQuery(12))->candidateCondition($db));
}
public function testMatchesThroughTheUsageMatcher(): void
{
$query = new LibraryUsageQuery(12);
self::assertTrue($query->matches('<!-- wp:divi/section {"globalModule":"12"} /-->'));
self::assertFalse($query->matches('<!-- wp:divi/section {"globalModule":"13"} /-->'));
}
}