mirror of
https://github.com/silverstripe/silverstripe-dms
synced 2024-10-22 14:05:56 +02:00
e4bc553521
* Add 2.0.0 changelog * Update DMSInterface and DMSDocumentInterface removing *page and adding getDocumentSetsByPage to DMSInterface * Update use documentation and update unit tests This commit changes the relationship from Pages has_many Documents to Pages has_many DocumentSets which are many_many to Documents. The upload field has been upated to attach documents to a set instead of a page, the tests updated and the DMSInterface and DMSDocumentInterface updated to be less relevant to pages and more relevant to document sets.
213 lines
8.4 KiB
PHP
213 lines
8.4 KiB
PHP
<?php
|
|
class DMSEmbargoTest extends SapphireTest
|
|
{
|
|
public static $fixture_file = "dmsembargotest.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 createFakeHTTPRequest($id)
|
|
{
|
|
$r = new SS_HTTPRequest('GET', 'index/'.$id);
|
|
$r->match('index/$ID');
|
|
return $r;
|
|
}
|
|
|
|
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
|
|
|
|
$doc = new DMSDocument();
|
|
$doc->Filename = "DMS-test-lorum-file.pdf";
|
|
$doc->Folder = "tests";
|
|
$doc->CanViewType = 'LoggedInUsers';
|
|
$docID = $doc->write();
|
|
|
|
//fake a request for a document
|
|
$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)");
|
|
|
|
$doc->embargoIndefinitely();
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
$result = $controller->index($this->createFakeHTTPRequest($docID));
|
|
$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"
|
|
);
|
|
|
|
DMS::$dmsFolder = $oldDMSFolder;
|
|
DMSDocument_Controller::$testMode = $oldTestMode;
|
|
}
|
|
|
|
public function testEmbargoIndefinitely()
|
|
{
|
|
$doc = new DMSDocument();
|
|
$doc->Filename = "DMS-test-lorum-file.pdf";
|
|
$doc->Folder = "tests";
|
|
$doc->write();
|
|
|
|
$doc->embargoIndefinitely();
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertTrue($doc->isEmbargoed(), "Document is embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$doc->clearEmbargo();
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
}
|
|
|
|
public function testExpireAtDate()
|
|
{
|
|
$doc = new DMSDocument();
|
|
$doc->Filename = "DMS-test-lorum-file.pdf";
|
|
$doc->Folder = "tests";
|
|
$doc->write();
|
|
|
|
$doc->expireAtDate(strtotime('-1 second'));
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertTrue($doc->isExpired(), "Document is expired");
|
|
|
|
$expireTime = "2019-04-05 11:43:13";
|
|
$doc->expireAtDate($expireTime);
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
SS_Datetime::set_mock_now($expireTime);
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertTrue($doc->isExpired(), "Document is expired");
|
|
SS_Datetime::clear_mock_now();
|
|
|
|
$doc->expireAtDate(strtotime('-1 second'));
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertTrue($doc->isExpired(), "Document is expired");
|
|
|
|
$doc->clearExpiry();
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
}
|
|
|
|
public function testEmbargoUntilDate()
|
|
{
|
|
$doc = new DMSDocument();
|
|
$doc->Filename = "DMS-test-lorum-file.pdf";
|
|
$doc->Folder = "tests";
|
|
$doc->write();
|
|
|
|
$doc->embargoUntilDate(strtotime('+1 minute'));
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertTrue($doc->isEmbargoed(), "Document is embargoed");
|
|
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$doc->embargoUntilDate(strtotime('-1 second'));
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$embargoTime = "2019-04-05 11:43:13";
|
|
$doc->embargoUntilDate($embargoTime);
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertTrue($doc->isEmbargoed(), "Document is embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
SS_Datetime::set_mock_now($embargoTime);
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
SS_Datetime::clear_mock_now();
|
|
|
|
$doc->clearEmbargo();
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
}
|
|
|
|
public function testEmbargoUntilPublished()
|
|
{
|
|
$s1 = $this->objFromFixture('SiteTree', 's1');
|
|
|
|
$doc = new DMSDocument();
|
|
$doc->Filename = "test file";
|
|
$doc->Folder = "0";
|
|
$dID = $doc->write();
|
|
|
|
$s1->getDocumentSets()->first()->getDocuments()->add($doc);
|
|
|
|
$s1->publish('Stage', 'Live');
|
|
$s1->doPublish();
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$doc->embargoUntilPublished();
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertTrue($doc->isEmbargoed(), "Document is embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$s1->publish('Stage', 'Live');
|
|
$s1->doPublish();
|
|
$doc = DataObject::get_by_id("DMSDocument", $dID);
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$doc->embargoUntilPublished();
|
|
$doc = DataObject::get_by_id("DMSDocument", $dID);
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertTrue($doc->isEmbargoed(), "Document is embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$doc->embargoIndefinitely();
|
|
$doc = DataObject::get_by_id("DMSDocument", $dID);
|
|
$this->assertTrue($doc->isHidden(), "Document is hidden");
|
|
$this->assertTrue($doc->isEmbargoed(), "Document is embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$s1->publish('Stage', 'Live');
|
|
$s1->doPublish();
|
|
$doc = DataObject::get_by_id("DMSDocument", $dID);
|
|
$this->assertTrue(
|
|
$doc->isHidden(),
|
|
"Document is still hidden because although the untilPublish flag is cleared, the indefinitely flag is there"
|
|
);
|
|
$this->assertTrue($doc->isEmbargoed(), "Document is embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
|
|
$doc->clearEmbargo();
|
|
$doc = DataObject::get_by_id("DMSDocument", $dID);
|
|
$this->assertFalse($doc->isHidden(), "Document is not hidden");
|
|
$this->assertFalse($doc->isEmbargoed(), "Document is not embargoed");
|
|
$this->assertFalse($doc->isExpired(), "Document is not expired");
|
|
}
|
|
}
|