diff --git a/src/Halcyon/Datasource/FileDatasource.php b/src/Halcyon/Datasource/FileDatasource.php index e056e948..e7c905d2 100644 --- a/src/Halcyon/Datasource/FileDatasource.php +++ b/src/Halcyon/Datasource/FileDatasource.php @@ -1,6 +1,7 @@ basePath)) - ? new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->basePath)) + ? new RecursiveIteratorIterator(new RecursiveDirectoryIterator( + $this->basePath, + FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::FOLLOW_SYMLINKS + )) : []; foreach ($it as $file) { diff --git a/tests/Halcyon/FileDatasourceTest.php b/tests/Halcyon/FileDatasourceTest.php index f5514458..b0a02c63 100644 --- a/tests/Halcyon/FileDatasourceTest.php +++ b/tests/Halcyon/FileDatasourceTest.php @@ -102,6 +102,16 @@ public function testGetAvailablePathsIsEmptyWhenBasePathIsMissing() $this->assertSame([], $datasource->getAvailablePaths()); } + public function testGetAvailablePathsFollowsSymlinkedDirectories() + { + $this->seedFile('shared/static-pages/index.htm', 'Index page'); + symlink($this->basePath . '/shared/static-pages', $this->basePath . '/pages/linked'); + + $paths = array_keys($this->datasource->getAvailablePaths()); + + $this->assertContains('pages/linked/index.htm', $paths); + } + // // selectOne() //