'img-123']) ); $result = $renderer->render($block); expect($result)->toHaveKeys(['component', 'data']); expect($result['component'])->toBe('cms/image'); expect($result['data']['imageId'])->toBe('img-123'); }); it('renders image block with imageUrl', function () { $renderer = new ImageBlockRenderer(); $block = ContentBlock::create( type: BlockType::image(), blockId: BlockId::fromString('image-1'), data: BlockData::fromArray(['imageUrl' => 'https://example.com/image.jpg']) ); $result = $renderer->render($block); expect($result['data']['imageUrl'])->toBe('https://example.com/image.jpg'); }); it('handles snake_case field names', function () { $renderer = new ImageBlockRenderer(); $block = ContentBlock::create( type: BlockType::image(), blockId: BlockId::fromString('image-1'), data: BlockData::fromArray(['image_id' => 'img-123', 'image_url' => 'https://example.com/image.jpg']) ); $result = $renderer->render($block); expect($result['data']['imageId'])->toBe('img-123'); expect($result['data']['imageUrl'])->toBe('https://example.com/image.jpg'); }); it('renders image block with caption and alt', function () { $renderer = new ImageBlockRenderer(); $block = ContentBlock::create( type: BlockType::image(), blockId: BlockId::fromString('image-1'), data: BlockData::fromArray([ 'imageId' => 'img-123', 'caption' => 'Image caption', 'alt' => 'Alt text', ]) ); $result = $renderer->render($block); expect($result['data']['caption'])->toBe('Image caption'); expect($result['data']['alt'])->toBe('Alt text'); }); it('uses caption as alt when alt is missing', function () { $renderer = new ImageBlockRenderer(); $block = ContentBlock::create( type: BlockType::image(), blockId: BlockId::fromString('image-1'), data: BlockData::fromArray([ 'imageId' => 'img-123', 'caption' => 'Image caption', ]) ); $result = $renderer->render($block); expect($result['data']['alt'])->toBe('Image caption'); }); it('renders image block with width and height settings', function () { $renderer = new ImageBlockRenderer(); $block = ContentBlock::create( type: BlockType::image(), blockId: BlockId::fromString('image-1'), data: BlockData::fromArray(['imageId' => 'img-123']), settings: BlockSettings::fromArray(['width' => 800, 'height' => 600]) ); $result = $renderer->render($block); expect($result['data']['width'])->toBe(800); expect($result['data']['height'])->toBe(600); }); it('provides default values for missing fields', function () { $renderer = new ImageBlockRenderer(); $block = ContentBlock::create( type: BlockType::image(), blockId: BlockId::fromString('image-1'), data: BlockData::fromArray(['imageId' => 'img-123']) ); $result = $renderer->render($block); expect($result['data']['imageId'])->toBe('img-123'); expect($result['data']['imageUrl'])->toBeNull(); expect($result['data']['caption'])->toBeNull(); expect($result['data']['alt'])->toBe(''); }); it('supports image block type', function () { $renderer = new ImageBlockRenderer(); expect($renderer->supports('image'))->toBeTrue(); expect($renderer->supports('hero'))->toBeFalse(); expect($renderer->supports('text'))->toBeFalse(); }); });