FileTreeBuilderTest.php•2.66 kB
<?php
declare(strict_types=1);
namespace Tests\Unit\Fetcher;
use Butschster\ContextGenerator\Lib\TreeBuilder\FileTreeBuilder;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase;
class FileTreeBuilderTest extends TestCase
{
private FileTreeBuilder $treeBuilder;
#[Test]
public function it_should_build_tree_from_list_of_files(): void
{
$files = [
'/root/project/src/file1.php',
'/root/project/src/file2.php',
'/root/project/src/Subfolder/file3.php',
'/root/project/tests/file4.php',
];
$basePath = '/root/project';
$expected = $this->treeBuilder->buildTree($files, $basePath);
// Get the actual output to match against
$result = $this->treeBuilder->buildTree($files, $basePath);
// We'll verify tree structure exists with all the files rather than exact format
$this->assertStringContainsString('└── src', $result);
$this->assertStringContainsString('Subfolder', $result);
$this->assertStringContainsString('file1.php', $result);
$this->assertStringContainsString('file2.php', $result);
$this->assertStringContainsString('file3.php', $result);
$this->assertStringContainsString('tests', $result);
$this->assertStringContainsString('file4.php', $result);
$this->assertEquals($expected, $result);
}
#[Test]
public function it_should_handle_empty_file_list(): void
{
$files = [];
$basePath = '/root/project';
$result = $this->treeBuilder->buildTree($files, $basePath);
// Check that result contains the "No files found" message or is empty
$this->assertTrue(
empty($result) ||
$this->stringContains("No files found")->evaluate($result, '', true),
);
}
#[Test]
public function it_should_normalize_paths_without_base_path(): void
{
$files = [
'src/file1.php',
'src/file2.php',
'tests/file3.php',
];
$basePath = '';
$result = $this->treeBuilder->buildTree($files, $basePath);
// Verify tree structure contains all the files rather than exact format
$this->assertStringContainsString('src', $result);
$this->assertStringContainsString('file1.php', $result);
$this->assertStringContainsString('file2.php', $result);
$this->assertStringContainsString('tests', $result);
$this->assertStringContainsString('file3.php', $result);
}
protected function setUp(): void
{
$this->treeBuilder = new FileTreeBuilder();
}
}