feat: add content handler registry
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* Tests for content handler registry.
|
||||
*
|
||||
* @package WPContentSync
|
||||
*/
|
||||
|
||||
namespace WPContentSync\Tests\Unit\Content;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use WPContentSync\Content\ContentHandlerInterface;
|
||||
use WPContentSync\Content\ContentHandlerRegistry;
|
||||
use WPContentSync\Sync\SyncContext;
|
||||
use WPContentSync\Sync\SyncResult;
|
||||
|
||||
class ContentHandlerRegistryTest extends TestCase {
|
||||
public function test_it_returns_handlers_in_package_order(): void {
|
||||
$posts = $this->handler( 'posts' );
|
||||
$terms = $this->handler( 'terms' );
|
||||
$media = $this->handler( 'media' );
|
||||
|
||||
$registry = new ContentHandlerRegistry( array( $media, $posts, $terms ) );
|
||||
|
||||
self::assertSame( array( $terms, $posts, $media ), $registry->ordered() );
|
||||
}
|
||||
|
||||
public function test_it_rejects_duplicate_buckets(): void {
|
||||
$this->expectException( \InvalidArgumentException::class );
|
||||
$this->expectExceptionMessage( 'Handler bucket "posts" is already registered.' );
|
||||
|
||||
new ContentHandlerRegistry( array( $this->handler( 'posts' ), $this->handler( 'posts' ) ) );
|
||||
}
|
||||
|
||||
private function handler( string $bucket ): ContentHandlerInterface {
|
||||
return new class( $bucket ) implements ContentHandlerInterface {
|
||||
private string $bucket;
|
||||
|
||||
public function __construct( string $bucket ) {
|
||||
$this->bucket = $bucket;
|
||||
}
|
||||
|
||||
public function bucket(): string {
|
||||
return $this->bucket;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<int, array<string, mixed>> $records Package records.
|
||||
*/
|
||||
public function importRecords( array $records, SyncContext $context ): SyncResult {
|
||||
return SyncResult::success( array( 'skipped' => count( $records ) ) );
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user