Skip to content

Commit 1840c26

Browse files
committed
[TASK] Add regression test for DecoratingPlantumlBinaryRenderer
Add unit tests to verify the decorator: - Creates temp directory when missing before rendering - Properly delegates to the inner renderer Also changes constructor to accept DiagramRenderer interface instead of concrete PlantumlRenderer to enable mocking in tests. Relates: TYPO3-Documentation#1099
1 parent ac32eab commit 1840c26

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace T3Docs\Typo3DocsTheme\Tests\Unit\Renderer;
6+
7+
use phpDocumentor\Guides\Graphs\Renderer\DiagramRenderer;
8+
use phpDocumentor\Guides\RenderContext;
9+
use PHPUnit\Framework\Attributes\Test;
10+
use PHPUnit\Framework\TestCase;
11+
use T3Docs\Typo3DocsTheme\Renderer\DecoratingPlantumlBinaryRenderer;
12+
13+
use function is_dir;
14+
use function rmdir;
15+
use function sys_get_temp_dir;
16+
17+
final class DecoratingPlantumlBinaryRendererTest extends TestCase
18+
{
19+
private const TEMP_SUBDIRECTORY = '/phpdocumentor';
20+
21+
#[Test]
22+
public function renderCreatesTempDirectoryWhenMissing(): void
23+
{
24+
$tempDir = sys_get_temp_dir() . self::TEMP_SUBDIRECTORY;
25+
26+
// Remove the directory if it exists to test creation
27+
if (is_dir($tempDir)) {
28+
@rmdir($tempDir);
29+
}
30+
31+
// Skip if we can't remove it (contains files from other processes)
32+
if (is_dir($tempDir)) {
33+
self::markTestSkipped('Cannot remove temp directory - it contains files from other processes');
34+
}
35+
36+
$innerRenderer = $this->createMock(DiagramRenderer::class);
37+
$innerRenderer->method('render')->willReturn('<svg></svg>');
38+
39+
$renderContext = $this->createMock(RenderContext::class);
40+
41+
$decorator = new DecoratingPlantumlBinaryRenderer($innerRenderer);
42+
$decorator->render($renderContext, 'A -> B');
43+
44+
self::assertDirectoryExists($tempDir);
45+
46+
// Clean up
47+
@rmdir($tempDir);
48+
}
49+
50+
#[Test]
51+
public function renderDelegatesToInnerRenderer(): void
52+
{
53+
$expectedResult = '<svg>diagram</svg>';
54+
$diagram = 'A -> B';
55+
56+
$renderContext = $this->createMock(RenderContext::class);
57+
58+
$innerRenderer = $this->createMock(DiagramRenderer::class);
59+
$innerRenderer->expects(self::once())
60+
->method('render')
61+
->with($renderContext, $diagram)
62+
->willReturn($expectedResult);
63+
64+
$decorator = new DecoratingPlantumlBinaryRenderer($innerRenderer);
65+
$result = $decorator->render($renderContext, $diagram);
66+
67+
self::assertSame($expectedResult, $result);
68+
}
69+
}

0 commit comments

Comments
 (0)