feat: Divi module catalog, attribute paths, short form and lit/divi-catalog
Adds per-path attribute kind (text/richtext/code/url/image/color/enum/ onoff/number/list/icon), derived from Divi's field component metadata where an attribute path names one unambiguously (module.paths() itself is unchanged; kinds() is a new, separate lookup exposed as path_kinds on lit/divi-catalog's module detail). This is not in the task-4 brief; it is added because 2b's sanitization routing (ruling R3) needs a metadata-derived field kind per attribute path. Verified live against the full 100-module catalog (564/4358 paths resolve a kind; the rest default to "unknown" and fall back to 2b's key-name routing). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Tests\Unit\Integrations\Divi;
|
||||
|
||||
use LIT\MCP\Abilities\Ability;
|
||||
use LIT\MCP\Integrations\Divi\DiviIntegration;
|
||||
use LIT\MCP\Integrations\WordPress\Schema\ContentSchema;
|
||||
use LIT\MCP\Tests\Unit\TestCase;
|
||||
use Mockery;
|
||||
|
||||
final class DiviIntegrationTest extends TestCase
|
||||
{
|
||||
/** Grows with every task that adds Divi abilities – keep in the order of abilities(). */
|
||||
private const EXPECTED = [
|
||||
'lit/divi-catalog',
|
||||
];
|
||||
|
||||
public function testProvidesTheDiviAbilitiesOnlyWithDivi5(): void
|
||||
{
|
||||
$integration = new DiviIntegration(Mockery::mock(ContentSchema::class));
|
||||
|
||||
self::assertSame('divi', $integration->id());
|
||||
self::assertFalse($integration->isAvailable(), 'no Divi classes in unit tests');
|
||||
self::assertSame(
|
||||
self::EXPECTED,
|
||||
array_map(static fn (Ability $ability): string => $ability->name(), $integration->abilities())
|
||||
);
|
||||
|
||||
foreach ($integration->abilities() as $ability) {
|
||||
self::assertSame('object', $ability->inputSchema()['type'], $ability->name());
|
||||
self::assertFalse($ability->inputSchema()['additionalProperties'], $ability->name());
|
||||
self::assertNotNull($ability->outputSchema(), $ability->name());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user