clock = new Clock();
// Create a mock ContentRenderer
$this->contentRenderer = Mockery::mock(ContentRenderer::class);
$this->service = new ContentPreviewService(
$this->contentRenderer,
$this->clock
);
});
it('renders preview HTML from ContentBlocks', function () {
$blocks = ContentBlocks::fromArray([
[
'id' => 'block-1',
'type' => 'text',
'data' => ['content' => '
Test content
'],
],
]);
$this->contentRenderer
->shouldReceive('render')
->once()
->andReturn('');
$html = $this->service->renderPreview($blocks);
expect($html)->toBeString();
expect($html)->not->toBeEmpty();
expect($html)->toContain('Test content');
});
it('renders multiple blocks in preview', function () {
$blocks = ContentBlocks::fromArray([
[
'id' => 'block-1',
'type' => 'hero',
'data' => ['title' => 'Hero Title'],
],
[
'id' => 'block-2',
'type' => 'text',
'data' => ['content' => 'Text content
'],
],
]);
$this->contentRenderer
->shouldReceive('render')
->once()
->andReturn('Hero Title
');
$html = $this->service->renderPreview($blocks);
expect($html)->toBeString();
expect($html)->toContain('Hero Title');
expect($html)->toContain('Text content');
});
it('renders empty blocks as empty string', function () {
$blocks = ContentBlocks::fromArray([]);
$this->contentRenderer
->shouldReceive('render')
->once()
->andReturn('');
$html = $this->service->renderPreview($blocks);
expect($html)->toBe('');
});
it('does not use caching for preview', function () {
$blocks = ContentBlocks::fromArray([
[
'id' => 'block-1',
'type' => 'text',
'data' => ['content' => 'Test
'],
],
]);
$this->contentRenderer
->shouldReceive('render')
->once()
->andReturn('Test
');
// Call twice - should render both times (no caching)
$html1 = $this->service->renderPreview($blocks);
$html2 = $this->service->renderPreview($blocks);
expect($html1)->toBe($html2);
// Verify render was called twice (no caching)
$this->contentRenderer->shouldHaveReceived('render')->twice();
});
});