Added test

This commit is contained in:
Daniel Hensby 2016-12-20 11:57:19 +00:00
parent f7f5f115ee
commit 97ec75df59
No known key found for this signature in database
GPG Key ID: B00D1E9767F0B06E
5 changed files with 96 additions and 16 deletions

View File

@ -1278,6 +1278,7 @@ class DMSDocument_Controller extends Controller
/**
* Returns the document object from the request object's ID parameter.
* Returns null, if no document found
* @return DMSDocument|null
*/
protected function getDocumentFromID($request)
{
@ -1380,18 +1381,8 @@ class DMSDocument_Controller extends Controller
//its ViewCount should be increased by 1 just before the browser sending the file to front.
$doc->trackView();
header('Content-Type: ' . $mime);
header('Content-Length: ' . filesize($path), null);
if (!empty($mime) && $mime != "text/html") {
header('Content-Disposition: '.$disposition.'; filename="'.$doc->getFilenameWithoutID().'"');
}
header('Content-transfer-encoding: 8bit');
header('Expires: 0');
header('Pragma: cache');
header('Cache-Control: private');
flush();
readfile($path);
exit;
$this->sendFile($path, $mime, $doc->getFilenameWithoutID(), $disposition);
return;
}
}
}
@ -1401,4 +1392,25 @@ class DMSDocument_Controller extends Controller
}
$this->httpError(404, 'This asset does not exist.');
}
/**
* @param string $path File path
* @param string $mime File mime type
* @param string $name File name
* @param string $disposition Content dispositon
*/
protected function sendFile($path, $mime, $name, $disposition) {
header('Content-Type: ' . $mime);
header('Content-Length: ' . filesize($path), null);
if (!empty($mime) && $mime != "text/html") {
header('Content-Disposition: '.$disposition.'; filename="'.addslashes($name).'"');
}
header('Content-transfer-encoding: 8bit');
header('Expires: 0');
header('Pragma: cache');
header('Cache-Control: private');
flush();
readfile($path);
exit;
}
}

View File

@ -0,0 +1,54 @@
<?php
/**
* Class DMSDocumentControllerTest
*/
class DMSDocumentControllerTest extends SapphireTest {
protected static $fixture_file = "dmstest.yml";
public function testDownloadBehaviourOpen() {
DMS::$dmsFolder = DMS_DIR; //sneakily setting the DMS folder to the folder where the test file lives
$this->logInWithPermission('ADMIN');
/** @var DMSDocument_Controller $controller */
$controller = $this->getMockBuilder('DMSDocument_Controller')
->setMethods(array('sendFile'))->getMock();
$self = $this;
$controller->expects($this->once())->method('sendFile')->will($this->returnCallback(function($path, $mime, $name, $disposition) use($self) {
$self->assertEquals('inline', $disposition);
}));
$openDoc = new DMSDocument();
$openDoc->Filename = "DMS-test-lorum-file.pdf";
$openDoc->Folder = "tests";
$openDoc->DownloadBehavior = 'open';
$openDoc->clearEmbargo(false);
$openDoc->write();
$request = new SS_HTTPRequest('GET', 'index/' . $openDoc->ID);
$request->match('index/$ID');
$controller->index($request);
}
public function testDownloadBehaviourDownload() {
DMS::$dmsFolder = DMS_DIR; //sneakily setting the DMS folder to the folder where the test file lives
$this->logInWithPermission('ADMIN');
/** @var DMSDocument_Controller $controller */
$controller = $this->getMockBuilder('DMSDocument_Controller')
->setMethods(array('sendFile'))->getMock();
$self = $this;
$controller->expects($this->once())->method('sendFile')->will($this->returnCallback(function($path, $mime, $name, $disposition) use($self) {
$self->assertEquals('attachment', $disposition);
}));
$openDoc = new DMSDocument();
$openDoc->Filename = "DMS-test-lorum-file.pdf";
$openDoc->Folder = "tests";
$openDoc->DownloadBehavior = 'download';
$openDoc->clearEmbargo(false);
$openDoc->write();
$request = new SS_HTTPRequest('GET', 'index/' . $openDoc->ID);
$request->match('index/$ID');
$controller->index($request);
}
}

View File

@ -2,12 +2,12 @@
class DMSDocumentTest extends SapphireTest
{
public static $fixture_file = "dms/tests/dmstest.yml";
protected static $fixture_file = "dms/tests/dmstest.yml";
public function tearDownOnce()
{
self::$is_running_test = true;
$d = DataObject::get("DMSDocument");
foreach ($d as $d1) {
$d1->delete();
@ -157,4 +157,16 @@ class DMSDocumentTest extends SapphireTest
."associated with causes that document to be deleted as well"
);
}
public function testDefaultDownloadBehabiourCMSFields() {
$document = singleton('DMSDocument');
Config::inst()->update('DMSDocument', 'default_download_behaviour', 'open');
$cmsFields = $document->getCMSFields();
$this->assertEquals('open', $cmsFields->dataFieldByName('DownloadBehavior')->Value());
Config::inst()->update('DMSDocument', 'default_download_behaviour', 'download');
$cmsFields = $document->getCMSFields();
$this->assertEquals('download', $cmsFields->dataFieldByName('DownloadBehavior')->Value());
}
}

View File

@ -7,7 +7,7 @@ class DMSEmbargoTest extends SapphireTest
public function tearDownOnce()
{
self::$is_running_test = true;
$d = DataObject::get("DMSDocument");
foreach ($d as $d1) {
$d1->delete();
@ -30,6 +30,7 @@ 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
$doc = new DMSDocument();
@ -54,6 +55,7 @@ class DMSEmbargoTest extends SapphireTest
$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()

View File

@ -46,4 +46,4 @@ DMSDocument:
Filename: test-file-file-doesnt-exist
Folder: 5
Tags: =>DMSTag.t5, =>DMSTag.t6
Pages: =>SiteTree.s5, =>SiteTree.s6
Pages: =>SiteTree.s5, =>SiteTree.s6