From 9a6507cf3b4e5f633bbe59a1a9c54ca0c19ea4d1 Mon Sep 17 00:00:00 2001 From: Mohamed Alsharaf Date: Sat, 27 Nov 2021 17:53:54 +1300 Subject: [PATCH] Fix populating file when path is assets folder --- code/PopulateFactory.php | 13 ++++-- tests/php/PopulateAssetFactoryTest.php | 62 +++++++++++++++++++++++++ tests/php/fixture/assets/image1.png | Bin 0 -> 9341 bytes 3 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 tests/php/PopulateAssetFactoryTest.php create mode 100644 tests/php/fixture/assets/image1.png diff --git a/code/PopulateFactory.php b/code/PopulateFactory.php index 4ee5235..ddcafd5 100644 --- a/code/PopulateFactory.php +++ b/code/PopulateFactory.php @@ -254,11 +254,18 @@ private function populateFile($data) $file = Image::create(); } - $folder = Folder::find_or_make(dirname($filenameWithoutAssets)); + $fileFolder = dirname($filenameWithoutAssets); $filename = basename($filenameWithoutAssets); + $folder = null; + + // Create a folder if the YML configuration indicates that the file should be created within a folder + if ($fileFolder !== '.') { + $folder = Folder::find_or_make($fileFolder); + $fileFolder = $folder->getFilename(); + } // We could just use $data['Filename'], but we need to allow for filsystem abstraction - $filePath = File::join_paths($folder->getFilename(), $filename); + $filePath = File::join_paths($fileFolder, $filename); $fileCfg = [ // if there's a filename conflict we've got new content so overwrite it. @@ -279,7 +286,7 @@ private function populateFile($data) $file->setFromString(file_get_contents($fixtureFilePath), $filePath, null, null, $fileCfg); // Setting ParentID needs to come after setFromString() as (at least sometimes) setFromString() resets the // file Parent back to the "Uploads" folder - $file->ParentID = $folder->ID; + $file->ParentID = $folder instanceof Folder ? $folder->ID : 0; $file->write(); $file->publishRecursive(); } catch (Exception $e) { diff --git a/tests/php/PopulateAssetFactoryTest.php b/tests/php/PopulateAssetFactoryTest.php new file mode 100644 index 0000000..2cbd55e --- /dev/null +++ b/tests/php/PopulateAssetFactoryTest.php @@ -0,0 +1,62 @@ +factory = new PopulateFactory(); + } + + /** + * Assert that a file is loaded into the expected path within assets directory (Root path). + */ + public function testLoadingFileToRootAssetsDirectory() + { + // Load a file using populate factory + $obj = $this->factory->createObject(Image::class, 'image1', [ + 'Filename' => 'image1.png', + 'PopulateFileFrom' => 'tests/php/fixture/assets/image1.png', + ]); + + // Assert that the file is created and exists in expected root directory of assets + $this->assertEquals('./image1.png', $obj->getFilename()); + $this->assertFileExists(__DIR__ . '/../../assets/image1.png'); + } + + /** + * Assert that a file is loaded into the expected path within assets directory (Within folder) + */ + public function testLoadingFileToFolderInAssetsDirectory() + { + // Load a file using populate factory + $obj = $this->factory->createObject(Image::class, 'image1', [ + 'Filename' => 'fixture/image1.png', + 'PopulateFileFrom' => 'tests/php/fixture/assets/image1.png', + ]); + + // Assert that the file is created and exists in expected root directory of assets + $this->assertEquals('fixture/image1.png', $obj->getFilename()); + $this->assertFileExists(__DIR__ . '/../../assets/fixture/image1.png'); + } +} diff --git a/tests/php/fixture/assets/image1.png b/tests/php/fixture/assets/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..e16ff20957ab6e2f392110faadc14a72e094eb1c GIT binary patch literal 9341 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 literal 0 HcmV?d00001