From 9610a0a284aa9b6f701cbafdbf0ba363351b5e0f Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 24 Feb 2017 15:07:25 +1300 Subject: [PATCH] BUG Prevent top-level files being created with incorrect parent folder --- .../BehatExtension/Context/FixtureContext.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/SilverStripe/BehatExtension/Context/FixtureContext.php b/src/SilverStripe/BehatExtension/Context/FixtureContext.php index 0a5c216..9b1be3a 100644 --- a/src/SilverStripe/BehatExtension/Context/FixtureContext.php +++ b/src/SilverStripe/BehatExtension/Context/FixtureContext.php @@ -615,6 +615,8 @@ class FixtureContext extends BehatContext if (!$data) { $data = array(); } + + $relativeTargetPath = (isset($data['Filename'])) ? $data['Filename'] : $identifier; $relativeTargetPath = preg_replace('/^' . ASSETS_DIR . '\/?/', '', $relativeTargetPath); $sourcePath = $this->joinPaths($this->getFilesPath(), basename($relativeTargetPath)); @@ -624,7 +626,7 @@ class FixtureContext extends BehatContext $parent = Folder::find_or_make($relativeTargetPath); $data['ID'] = $parent->ID; } else { - $parent = Folder::find_or_make(dirname($relativeTargetPath)); + // Check file exists if (!file_exists($sourcePath)) { throw new \InvalidArgumentException(sprintf( 'Source file for "%s" cannot be found in "%s"', @@ -632,7 +634,17 @@ class FixtureContext extends BehatContext $sourcePath )); } - $data['ParentID'] = $parent->ID; + + // Get parent + $parentID = 0; + if (strstr($relativeTargetPath, '/')) { + $folderName = dirname($relativeTargetPath); + $parent = Folder::find_or_make($folderName); + if ($parent) { + $parentID = $parent->ID; + } + } + $data['ParentID'] = $parentID; // Load file into APL and retrieve tuple $asset = $this->getAssetStore()->setFromLocalFile(