From 283f9fff7a4c726892873d263b20d91f30b749ba Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Wed, 17 May 2017 16:24:25 +1200 Subject: [PATCH] API Make storage path configurable. Fix instance singleton and remove static methods --- _config/config.yml | 12 ++++ _config/dmsdocument.yml | 10 --- code/DMS.php | 99 ++++++++++++++++++----------- code/model/DMSDocument.php | 15 +++-- code/model/DMSDocument_versions.php | 2 +- docs/en/changelogs/2.0.0.md | 6 ++ docs/en/configuration.md | 16 ++++- tests/DMSDocumentControllerTest.php | 11 ++-- tests/DMSDocumentTest.php | 47 +++++++++----- tests/DMSEmbargoTest.php | 33 ++-------- tests/DMSFilesystemTestHelper.php | 42 ++++++++++++ tests/DMSShortcodeTest.php | 4 ++ tests/DMSTest.php | 89 ++++++++------------------ tests/DMSVersioningTest.php | 76 ++++++++-------------- 14 files changed, 245 insertions(+), 217 deletions(-) create mode 100644 _config/config.yml create mode 100644 tests/DMSFilesystemTestHelper.php diff --git a/_config/config.yml b/_config/config.yml new file mode 100644 index 0000000..05cef68 --- /dev/null +++ b/_config/config.yml @@ -0,0 +1,12 @@ +--- +Name: dmsconfig +--- +SiteTree: + extensions: + - DMSSiteTreeExtension + # Whether to show the document sets tab in the CMS for the page type this extension is applied to + documents_enabled: true + +HtmlEditorField_Toolbar: + extensions: + - DocumentHtmlEditorFieldToolbar diff --git a/_config/dmsdocument.yml b/_config/dmsdocument.yml index 9d796ee..d6493e6 100644 --- a/_config/dmsdocument.yml +++ b/_config/dmsdocument.yml @@ -6,15 +6,5 @@ Director: rules: 'dmsdocument/$ID' : 'DMSDocument_Controller' -SiteTree: - extensions: - - DMSSiteTreeExtension - # Whether to show the document sets tab in the CMS for the page type this extension is applied to - documents_enabled: true - -HtmlEditorField_Toolbar: - extensions: - - DocumentHtmlEditorFieldToolbar - DMSDocument_versions: enable_versions: true diff --git a/code/DMS.php b/code/DMS.php index 3b0e81e..541b01d 100644 --- a/code/DMS.php +++ b/code/DMS.php @@ -1,21 +1,30 @@ getStoragePath(); + + if (!is_dir($dmsPath)) { + self::$instance->createStorageFolder($dmsPath); + } + + if (!file_exists($dmsPath . DIRECTORY_SEPARATOR . '.htaccess')) { + // Restrict access to the storage folder + copy( + BASE_PATH . DIRECTORY_SEPARATOR . DMS_DIR . DIRECTORY_SEPARATOR + . 'resources' . DIRECTORY_SEPARATOR . '.htaccess', + $dmsPath . DIRECTORY_SEPARATOR . '.htaccess' + ); + + copy( + BASE_PATH . DIRECTORY_SEPARATOR . DMS_DIR . DIRECTORY_SEPARATOR + . 'resources' . DIRECTORY_SEPARATOR . 'web.config', + $dmsPath . DIRECTORY_SEPARATOR . 'web.config' + ); + } } - - if (!file_exists($dmsPath . DIRECTORY_SEPARATOR . '.htaccess')) { - // Restrict access to the storage folder - copy( - BASE_PATH . DIRECTORY_SEPARATOR . DMS_DIR . DIRECTORY_SEPARATOR - . 'resources' . DIRECTORY_SEPARATOR . '.htaccess', - $dmsPath . DIRECTORY_SEPARATOR . '.htaccess' - ); - - copy( - BASE_PATH . DIRECTORY_SEPARATOR . DMS_DIR . DIRECTORY_SEPARATOR - . 'resources' . DIRECTORY_SEPARATOR . 'web.config', - $dmsPath . DIRECTORY_SEPARATOR . 'web.config' - ); - } - return $dms; + return self::$instance; } /** + * Get the storage path for DMS documents + * * @return string */ - public static function get_dms_path() + public function getStoragePath() { - return BASE_PATH . DIRECTORY_SEPARATOR . self::$dmsFolder; + return BASE_PATH . DIRECTORY_SEPARATOR . $this->config()->get('folder_name'); } - public static function transform_file_to_file_path($file) + /** + * Gets a file path from either a File or a string + * + * @param string|File $file + * @return string + * @throws FileNotFoundException If an unexpected value was provided, or the filename was null + */ + public function transformFileToFilePath($file) { //confirm we have a file $filePath = null; @@ -84,16 +105,16 @@ class DMS implements DMSInterface /** * Takes a File object or a String (path to a file) and copies it into the DMS. The original file remains unchanged. * When storing a document, sets the fields on the File has "tag" metadata. - * @param $file File object, or String that is path to a file to store, + * @param File|string $file File object, or String that is path to a file to store, * e.g. "assets/documents/industry/supplied-v1-0.pdf" * @return DMSDocument */ public function storeDocument($file) { - $filePath = self::transform_file_to_file_path($file); + $filePath = $this->transformFileToFilePath($file); - //create a new document and get its ID - $doc = new DMSDocument(); + // Create a new document and get its ID + $doc = DMSDocument::create(); $doc->write(); $doc->storeDocument($filePath); @@ -156,22 +177,26 @@ class DMS implements DMSInterface /** * Creates a storage folder for the given path - * @param $path Path to create a folder for + * + * @param string $path Path to create a folder for + * @return $this */ - public static function create_storage_folder($path) + public function createStorageFolder($path) { if (!is_dir($path)) { - mkdir($path, 0777); + mkdir($path, 0777, true); } + return $this; } /** * Calculates the storage path from a database DMSDocument ID + * + * @return int */ - public static function get_storage_folder($id) + public function getStorageFolder($id) { - $folderName = intval($id / self::$dmsFolderSize); - return $folderName; + return intval($id / self::config()->get('folder_size')); } /** diff --git a/code/model/DMSDocument.php b/code/model/DMSDocument.php index 958c8d4..bd76322 100644 --- a/code/model/DMSDocument.php +++ b/code/model/DMSDocument.php @@ -667,7 +667,8 @@ class DMSDocument extends DataObject implements DMSDocumentInterface public function getFullPath() { if ($this->Filename) { - return DMS::get_dms_path() . DIRECTORY_SEPARATOR . $this->Folder . DIRECTORY_SEPARATOR . $this->Filename; + return DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR + . $this->Folder . DIRECTORY_SEPARATOR . $this->Filename; } return null; @@ -712,7 +713,7 @@ class DMSDocument extends DataObject implements DMSDocumentInterface */ public function getStorageFolder() { - return DMS::get_dms_path() . DIRECTORY_SEPARATOR . DMS::get_storage_folder($this->ID); + return DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . DMS::inst()->getStorageFolder($this->ID); } /** @@ -770,7 +771,7 @@ class DMSDocument extends DataObject implements DMSDocumentInterface /** * Relate an existing file on the filesystem to the document. * - * Copies the file to the new destination, as defined in {@link get_DMS_path()}. + * Copies the file to the new destination, as defined in {@link DMS::getStoragePath()}. * * @param string $filePath Path to file, relative to webroot. * @@ -785,10 +786,10 @@ class DMSDocument extends DataObject implements DMSDocumentInterface // calculate all the path to copy the file to $fromFilename = basename($filePath); $toFilename = $this->ID. '~' . $fromFilename; //add the docID to the start of the Filename - $toFolder = DMS::get_storage_folder($this->ID); - $toPath = DMS::get_dms_path() . DIRECTORY_SEPARATOR . $toFolder . DIRECTORY_SEPARATOR . $toFilename; + $toFolder = DMS::inst()->getStorageFolder($this->ID); + $toPath = DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $toFolder . DIRECTORY_SEPARATOR . $toFilename; - DMS::create_storage_folder(DMS::get_dms_path() . DIRECTORY_SEPARATOR . $toFolder); + DMS::inst()->createStorageFolder(DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $toFolder); //copy the file into place $fromPath = BASE_PATH . DIRECTORY_SEPARATOR . $filePath; @@ -832,7 +833,7 @@ class DMSDocument extends DataObject implements DMSDocumentInterface */ public function replaceDocument($file) { - $filePath = DMS::transform_file_to_file_path($file); + $filePath = DMS::inst()->transformFileToFilePath($file); $doc = $this->storeDocument($filePath); // replace the document return $doc; diff --git a/code/model/DMSDocument_versions.php b/code/model/DMSDocument_versions.php index 7957e8f..87b070c 100644 --- a/code/model/DMSDocument_versions.php +++ b/code/model/DMSDocument_versions.php @@ -179,7 +179,7 @@ class DMSDocument_versions extends DataObject if (!$filename) { $filename = $this->Filename; } - return DMS::get_dms_path() . DIRECTORY_SEPARATOR . $this->Folder . DIRECTORY_SEPARATOR . $filename; + return DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $this->Folder . DIRECTORY_SEPARATOR . $filename; } /** diff --git a/docs/en/changelogs/2.0.0.md b/docs/en/changelogs/2.0.0.md index 9077fd2..d0380de 100644 --- a/docs/en/changelogs/2.0.0.md +++ b/docs/en/changelogs/2.0.0.md @@ -23,6 +23,12 @@ having a Document Set intermediary (@todo Add a build task for this). * `DMSDocumentAddController::add_allowed_extensions` removed, use YAML configuration `DMSDocumentAddController::allowed_extensions` instead * `DMSInterface` (and `DMS`) are stricter in the `getByPage` method, enforcing a `SiteTree` type hint * New method `DMSInterface::getDocumentSetsByPage` (and in `DMS`) +* `DMS::$dmsFolder` removed, use YAML configuration `DMS.folder_name` instead +* `DMS::$dmsFolderSize` removed, use YAML configuration `DMS.folder_size` instead +* `DMS::get_dms_path` made non-static, use `DMS::inst()->getStoragePath()` instead +* `DMS::transform_file_to_file_path` made non-static, use `DMS::inst()->transformFileToFilePath()` instead +* `DMS::create_storage_folder` made non-static, use `DMS::inst()->createStorageFolder()` instead +* `DMS::get_storage_folder` made non-static, use `DMS::inst()->getStorageFolder()` instead ## Template changes diff --git a/docs/en/configuration.md b/docs/en/configuration.md index dc4db25..1857703 100644 --- a/docs/en/configuration.md +++ b/docs/en/configuration.md @@ -1,6 +1,20 @@ # Configuration -The file location is set via the `DMS::$dmsFolder` static, and points to a location in the webroot. +The file location is set via the `DMS.folder_name` configuation property, and points to a location in the webroot. By +default, this resides in an underscores folder within the assets folder. This means that automated snapshots/backups +(e.g. using [sspak](https://github.com/silverstripe/sspak)) can still handle DMS documents, but they will not show up +when navigating asset folders in the CMS. + +## Changing the default storage folder + +You can change the default storage folder location using YAML configuration. This folder would be relative to your +project root directory: + +```yaml +DMS: + folder_name: my-custom-folder +``` + ## Enable/disable documents/sets for a specific page type diff --git a/tests/DMSDocumentControllerTest.php b/tests/DMSDocumentControllerTest.php index e034593..82440ea 100644 --- a/tests/DMSDocumentControllerTest.php +++ b/tests/DMSDocumentControllerTest.php @@ -5,7 +5,7 @@ */ class DMSDocumentControllerTest extends SapphireTest { - protected static $fixture_file = "dmstest.yml"; + protected static $fixture_file = 'dmstest.yml'; /** * Test that the download behaviour is either "open" or "download" @@ -16,7 +16,7 @@ class DMSDocumentControllerTest extends SapphireTest */ public function testDownloadBehaviourOpen($behaviour, $expectedDisposition) { - DMS::$dmsFolder = DMS_DIR; //sneakily setting the DMS folder to the folder where the test file lives + Config::inst()->update('DMS', 'folder_name', 'assets/_unit-test-123'); $this->logInWithPermission('ADMIN'); @@ -33,15 +33,16 @@ class DMSDocumentControllerTest extends SapphireTest }) ); - $openDoc = new DMSDocument(); - $openDoc->Filename = "DMS-test-lorum-file.pdf"; - $openDoc->Folder = "tests"; + $openDoc = DMS::inst()->storeDocument('dms/tests/DMS-test-lorum-file.pdf'); $openDoc->DownloadBehavior = $behaviour; $openDoc->clearEmbargo(false); $openDoc->write(); + $request = new SS_HTTPRequest('GET', 'index/' . $openDoc->ID); $request->match('index/$ID'); $controller->index($request); + + DMSFilesystemTestHelper::delete('assets/_unit-test-123'); } /** diff --git a/tests/DMSDocumentTest.php b/tests/DMSDocumentTest.php index d010e3f..b0278a5 100644 --- a/tests/DMSDocumentTest.php +++ b/tests/DMSDocumentTest.php @@ -3,22 +3,6 @@ class DMSDocumentTest extends SapphireTest { protected static $fixture_file = 'dmstest.yml'; - public function tearDownOnce() - { - self::$is_running_test = true; - - $d = DataObject::get('DMSDocument'); - foreach ($d as $d1) { - $d1->delete(); - } - $t = DataObject::get('DMSTag'); - foreach ($t as $t1) { - $t1->delete(); - } - - self::$is_running_test = $this->originalIsRunningTest; - } - public function testDefaultDownloadBehabiourCMSFields() { $document = singleton('DMSDocument'); @@ -259,4 +243,35 @@ class DMSDocumentTest extends SapphireTest $d2 = $this->objFromFixture('DMSDocument', 'd2'); $this->assertSame('File That Doesn\'t Exist (Title)', $d2->getTitle()); } + + /** + * Ensure that the folder a document's file is stored in can be retrieved, and that delete() will also delete + * the file and the record + */ + public function testGetStorageFolderThenDelete() + { + Config::inst()->update('DMS', 'folder_name', 'assets/_unit-tests'); + + $document = DMS::inst()->storeDocument('dms/tests/DMS-test-lorum-file.pdf'); + $filename = $document->getStorageFolder() . '/' . $document->getFileName(); + + $this->assertTrue(file_exists($filename)); + $document->delete(); + $this->assertFalse($document->exists()); + $this->assertFalse(file_exists($filename)); + + DMSFilesystemTestHelper::delete('assets/_unit-tests'); + } + + /** + * Ensure that the description can be returned in HTML format + */ + public function testGetDescriptionWithLineBreak() + { + $document = DMSDocument::create(); + $document->Description = "Line 1\nLine 2\nLine 3"; + $document->write(); + + $this->assertSame("Line 1
\nLine 2
\nLine 3", $document->getDescriptionWithLineBreak()); + } } diff --git a/tests/DMSEmbargoTest.php b/tests/DMSEmbargoTest.php index 780e449..bd5faed 100644 --- a/tests/DMSEmbargoTest.php +++ b/tests/DMSEmbargoTest.php @@ -1,23 +1,7 @@ delete(); - } - $t = DataObject::get("DMSTag"); - foreach ($t as $t1) { - $t1->delete(); - } - - self::$is_running_test = $this->originalIsRunningTest; - } + protected static $fixture_file = 'dmsembargotest.yml'; public function createFakeHTTPRequest($id) { @@ -28,13 +12,10 @@ class DMSEmbargoTest extends SapphireTest public function testBasicEmbargo() { - $oldDMSFolder = DMS::$dmsFolder; $oldTestMode = DMSDocument_Controller::$testMode; - DMS::$dmsFolder = DMS_DIR; //sneakily setting the DMS folder to the folder where the test file lives + Config::inst()->update('DMS', 'folder_name', 'assets/_unit-test-123'); - $doc = new DMSDocument(); - $doc->Filename = "DMS-test-lorum-file.pdf"; - $doc->Folder = "tests"; + $doc = DMS::inst()->storeDocument('dms/tests/DMS-test-lorum-file.pdf'); $doc->CanViewType = 'LoggedInUsers'; $docID = $doc->write(); @@ -42,24 +23,24 @@ class DMSEmbargoTest extends SapphireTest $controller = new DMSDocument_Controller(); DMSDocument_Controller::$testMode = true; $result = $controller->index($this->createFakeHTTPRequest($docID)); - $this->assertEquals($doc->getFullPath(), $result, "Correct underlying file returned (in test mode)"); + $this->assertEquals($doc->getFullPath(), $result, 'Correct underlying file returned (in test mode)'); $doc->embargoIndefinitely(); $this->logInWithPermission('ADMIN'); $result = $controller->index($this->createFakeHTTPRequest($docID)); - $this->assertEquals($doc->getFullPath(), $result, "Admins can still download embargoed files"); + $this->assertEquals($doc->getFullPath(), $result, 'Admins can still download embargoed files'); $this->logInWithPermission('random-user-group'); $result = $controller->index($this->createFakeHTTPRequest($docID)); $this->assertNotEquals( $doc->getFullPath(), $result, - "File no longer returned (in test mode) when switching to other user group" + 'File no longer returned (in test mode) when switching to other user group' ); - DMS::$dmsFolder = $oldDMSFolder; DMSDocument_Controller::$testMode = $oldTestMode; + DMSFilesystemTestHelper::delete('assets/_unit-test-123'); } public function testEmbargoIndefinitely() diff --git a/tests/DMSFilesystemTestHelper.php b/tests/DMSFilesystemTestHelper.php new file mode 100644 index 0000000..6255da7 --- /dev/null +++ b/tests/DMSFilesystemTestHelper.php @@ -0,0 +1,42 @@ +isDir() ? 'rmdir' : 'unlink'; + $action($fileinfo->getRealPath()); + } + + rmdir($path); + } else { + unlink($path); + } + } +} diff --git a/tests/DMSShortcodeTest.php b/tests/DMSShortcodeTest.php index c913920..1564401 100644 --- a/tests/DMSShortcodeTest.php +++ b/tests/DMSShortcodeTest.php @@ -9,6 +9,8 @@ class DMSShortcodeTest extends SapphireTest { public function testShortcodeOperation() { + Config::inst()->update('DMS', 'folder_name', 'assets/_unit-test-123'); + $file = 'dms/tests/DMS-test-lorum-file.pdf'; $document = DMS::inst()->storeDocument($file); @@ -23,5 +25,7 @@ class DMSShortcodeTest extends SapphireTest $this->assertStringEndsWith("/dmsdocument/$document->ID", $link->getAttribute('href')); $this->assertEquals($document->getExtension(), $link->getAttribute('data-ext')); $this->assertEquals($document->getFileSizeFormatted(), $link->getAttribute('data-size')); + + DMSFilesystemTestHelper::delete('assets/_unit-test-123'); } } diff --git a/tests/DMSTest.php b/tests/DMSTest.php index 6a5f4ce..d95b008 100644 --- a/tests/DMSTest.php +++ b/tests/DMSTest.php @@ -5,86 +5,46 @@ class DMSTest extends FunctionalTest /** * Stub PDF files for testing + * * @var string */ public static $testFile = 'dms/tests/DMS-test-lorum-file.pdf'; public static $testFile2 = 'dms/tests/DMS-test-document-2.pdf'; /** - * Store values to reset back to after this test runs + * The test folder to write assets into + * + * @var string */ - public static $dmsFolderOld; - public static $dmsFolderSizeOld; + protected $testDmsPath = 'assets/_dms-assets-test-1234'; /** - * @var DMS + * @var DMSInterace */ protected $dms; + /** + * Use a test DMS folder, so we don't overwrite the live one, and clear it out in case of previous broken tests + * + * {@inheritDoc} + */ public function setUp() { parent::setUp(); - - self::$dmsFolderOld = DMS::$dmsFolder; - self::$dmsFolderSizeOld = DMS::$dmsFolderSize; - - //use a test DMS folder, so we don't overwrite the live one - DMS::$dmsFolder = 'dms-assets-test-1234'; - - //clear out the test folder (in case a broken test doesn't delete it) - $this->delete(BASE_PATH . DIRECTORY_SEPARATOR . 'dms-assets-test-1234'); - + Config::inst()->update('DMS', 'folder_name', $this->testDmsPath); + DMSFilesystemTestHelper::delete($this->testDmsPath); $this->dms = DMS::inst(); } + /** + * Delete the test folder after the test runs + * + * {@inheritDoc} + */ public function tearDown() { parent::tearDown(); - - self::$is_running_test = true; - - $d = DataObject::get("DMSDocument"); - foreach ($d as $d1) { - $d1->delete(); - } - $t = DataObject::get("DMSTag"); - foreach ($t as $t1) { - $t1->delete(); - } - - //delete the test folder after the test runs - $this->delete(BASE_PATH . DIRECTORY_SEPARATOR . 'dms-assets-test-1234'); - - //set the old DMS folder back again - DMS::$dmsFolder = self::$dmsFolderOld; - DMS::$dmsFolderSize = self::$dmsFolderSizeOld; - - self::$is_running_test = $this->originalIsRunningTest; - } - - /** - * Delete a file that was created during a unit test - * - * @param string $path - */ - public function delete($path) - { - if (file_exists($path) || is_dir($path)) { - $it = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($path), - RecursiveIteratorIterator::CHILD_FIRST - ); - foreach ($it as $file) { - if (in_array($file->getBasename(), array('.', '..'))) { - continue; - } elseif ($file->isDir()) { - rmdir($file->getPathname()); - } elseif ($file->isFile() || $file->isLink()) { - unlink($file->getPathname()); - } - } - rmdir($path); - } + DMSFilesystemTestHelper::delete($this->testDmsPath); } public function testDMSStorage() @@ -95,7 +55,7 @@ class DMSTest extends FunctionalTest $this->assertNotNull($document, "Document object created"); $this->assertTrue( file_exists( - DMS::get_dms_path() . DIRECTORY_SEPARATOR . $document->Folder + DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $document->Folder . DIRECTORY_SEPARATOR . $document->Filename ), "Document file copied into DMS folder" @@ -104,7 +64,7 @@ class DMSTest extends FunctionalTest public function testDMSFolderSpanning() { - DMS::$dmsFolderSize = 5; + Config::inst()->update('DMS', 'folder_size', 5); $file = self::$testFile; $documents = array(); @@ -128,7 +88,10 @@ class DMSTest extends FunctionalTest // Test we created 4 folder to contain the 17 files foreach ($folders as $f) { - $this->assertTrue(is_dir(DMS::get_dms_path() . DIRECTORY_SEPARATOR . $f), "Document folder '$f' exists"); + $this->assertTrue( + is_dir(DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $f), + "Document folder '$f' exists" + ); } } @@ -146,7 +109,7 @@ class DMSTest extends FunctionalTest $this->assertNotNull($document, "Document object created"); $this->assertTrue( file_exists( - DMS::get_dms_path() . DIRECTORY_SEPARATOR . $document->Folder + DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $document->Folder . DIRECTORY_SEPARATOR . $document->Filename ), "Document file copied into DMS folder" diff --git a/tests/DMSVersioningTest.php b/tests/DMSVersioningTest.php index feaeb48..318766e 100755 --- a/tests/DMSVersioningTest.php +++ b/tests/DMSVersioningTest.php @@ -10,74 +10,48 @@ class DMSVersioningTest extends SapphireTest public static $testFile = 'dms/tests/DMS-test-lorum-file.pdf'; public static $testFile2 = 'dms/tests/DMS-test-document-2.pdf'; + /** + * The test folder to write assets into + * + * @var string + */ + protected $testDmsPath = 'assets/_dms-assets-test-versions'; + /** * Store values to reset back to after this test runs */ - public static $dmsFolderOld; - public static $dmsFolderSizeOld; public static $dmsEnableVersionsOld; + /** + * Use a test DMS folder, so we don't overwrite the live one, and clear out the test folder (in case a broken + * test doesn't delete it) + * + * {@inheritDoc} + */ public function setUp() { parent::setUp(); - self::$dmsFolderOld = DMS::$dmsFolder; - self::$dmsFolderSizeOld = DMS::$dmsFolderSize; self::$dmsEnableVersionsOld = DMSDocument_versions::$enable_versions; DMSDocument_versions::$enable_versions = true; - //use a test DMS folder, so we don't overwrite the live one - DMS::$dmsFolder = 'dms-assets-test-versions'; - - //clear out the test folder (in case a broken test doesn't delete it) - $this->delete(BASE_PATH . DIRECTORY_SEPARATOR . 'dms-assets-test-versions'); - } - - public function tearDown() - { - $d = DataObject::get("DMSDocument"); - foreach ($d as $d1) { - $d1->delete(); - } - $t = DataObject::get("DMSTag"); - foreach ($t as $t1) { - $t1->delete(); - } - - // Delete the test folder after the test runs - $this->delete(BASE_PATH . DIRECTORY_SEPARATOR . 'dms-assets-test-versions'); - - parent::tearDown(); - - // Set the old DMS folder back again - DMS::$dmsFolder = self::$dmsFolderOld; - DMS::$dmsFolderSize = self::$dmsFolderSizeOld; - DMSDocument_versions::$enable_versions = self::$dmsEnableVersionsOld; + Config::inst()->update('DMS', 'folder_name', $this->testDmsPath); + DMSFilesystemTestHelper::delete($this->testDmsPath); } /** - * Delete a file that was created during a unit test + * Delete the test folder after the tests run * - * @param string $path + * {@inheritDoc} */ - public function delete($path) + public function tearDown() { - if (file_exists($path) || is_dir($path)) { - $it = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($path), - RecursiveIteratorIterator::CHILD_FIRST - ); - foreach ($it as $file) { - if (in_array($file->getBasename(), array('.', '..'))) { - continue; - } elseif ($file->isDir()) { - rmdir($file->getPathname()); - } elseif ($file->isFile() || $file->isLink()) { - unlink($file->getPathname()); - } - } - rmdir($path); - } + parent::tearDown(); + + DMSFilesystemTestHelper::delete($this->testDmsPath); + + // Set the old DMS folder back again + DMSDocument_versions::$enable_versions = self::$dmsEnableVersionsOld; } public function testDMSVersionStorage() @@ -91,7 +65,7 @@ class DMSVersioningTest extends SapphireTest $this->assertNotNull($document, "Document object created"); $this->assertTrue( file_exists( - DMS::get_dms_path() . DIRECTORY_SEPARATOR . $document->Folder + DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $document->Folder . DIRECTORY_SEPARATOR . $document->Filename ), "Document file copied into DMS folder"