Source of file DMSTest.php
Size: 6,162 Bytes - Last Modified: 2021-12-23T10:29:25+00:00
/var/www/docs.ssmods.com/process/src/tests/DMSTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | <?php class DMSTest extends FunctionalTest { protected static $fixture_file = 'dmstest.yml'; /** * 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'; /** * The test folder to write assets into * * @var string */ protected $testDmsPath = 'assets/_dms-assets-test-1234'; /** * @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(); 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(); DMSFilesystemTestHelper::delete($this->testDmsPath); } public function testDMSStorage() { $file = self::$testFile; $document = $this->dms->storeDocument($file); $this->assertNotNull($document, "Document object created"); $this->assertTrue( file_exists( DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $document->Folder . DIRECTORY_SEPARATOR . $document->Filename ), "Document file copied into DMS folder" ); } public function testDMSFolderSpanning() { Config::inst()->update('DMS', 'folder_size', 5); $file = self::$testFile; $documents = array(); for ($i = 0; $i <= 16; $i++) { $document = $this->dms->storeDocument($file); $this->assertNotNull($document, "Document object created on run number: $i"); $this->assertTrue(file_exists($document->getFullPath())); $documents[] = $document; } // Test document objects have their folders set $folders = array(); for ($i = 0; $i <= 16; $i++) { $folderName = $documents[$i]->Folder; $this->assertTrue( strpos($documents[$i]->getFullPath(), DIRECTORY_SEPARATOR . $folderName . DIRECTORY_SEPARATOR) !== false, "Correct folder name for the documents. Document path contains reference to folder name '$folderName'" ); $folders[] = $folderName; } // Test we created 4 folder to contain the 17 files foreach ($folders as $f) { $this->assertTrue( is_dir(DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $f), "Document folder '$f' exists" ); } } public function testReplaceDocument() { // Store the first document $document = $this->dms->storeDocument(self::$testFile); $document->Title = "My custom title"; $document->Description = "My custom description"; $document->write(); // Then overwrite with a second document $document = $document->replaceDocument(self::$testFile2); $this->assertNotNull($document, "Document object created"); $this->assertTrue( file_exists( DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $document->Folder . DIRECTORY_SEPARATOR . $document->Filename ), "Document file copied into DMS folder" ); $this->assertContains( "DMS-test-document-2", $document->Filename, "Original document filename is contain in the new filename" ); $this->assertEquals("My custom title", $document->Title, "Custom title not modified"); $this->assertEquals("My custom description", $document->Description, "Custom description not modified"); } /** * Test that documents can be returned by a given page */ public function testGetByPageWithoutEmbargoes() { $pageWithEmbargoes = $this->objFromFixture('SiteTree', 's3'); $documents = $this->dms->getByPage($pageWithEmbargoes); // Fixture: 6 documents in set, 1 is embargoed $this->assertCount(5, $documents, 'Embargoed documents are excluded by default'); $this->assertContainsOnlyInstancesOf('DMSDocument', $documents); } /** * Test that embargoed documents are excluded from getByPage */ public function testGetByPageWithEmbargoedDocuments() { $pageWithEmbargoes = $this->objFromFixture('SiteTree', 's3'); $documents = $this->dms->getByPage($pageWithEmbargoes, true); // Fixture: 6 documents in set, 1 is embargoed $this->assertCount(6, $documents, 'Embargoed documents can be included'); $this->assertContainsOnlyInstancesOf('DMSDocument', $documents); } /** * Ensure the shortcode handler key is configurable */ public function testShortcodeHandlerKeyIsConfigurable() { Config::inst()->update('DMS', 'shortcode_handler_key', 'testing'); $this->assertSame('testing', DMS::inst()->getShortcodeHandlerKey()); } /** * Test that document sets can be retrieved for a given page */ public function testGetDocumentSetsByPage() { $page = $this->objFromFixture('SiteTree', 's1'); $sets = $this->dms->getDocumentSetsByPage($page); $this->assertCount(2, $sets); $this->assertContainsOnlyInstancesOf('DMSDocumentSet', $sets); } /** * Ensure that assets/* folders are not included in filesystem sync operations */ public function testFolderExcludedFromFilesystemSync() { // Undo setup config changes Config::unnest(); Config::nest(); $result = Filesystem::config()->get('sync_blacklisted_patterns'); $folderName = substr(DMS::config()->get('folder_name'), 7); $this->assertContains('/^' . $folderName . '$/i', $result); } } |