|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* Tests that datastream versions code works as intended.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Datastream version tests.
|
|
|
|
*/
|
|
|
|
class IslandoraDatastreamVersionTestCase extends IslandoraWebTestCase {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets info to display to describe this test.
|
|
|
|
*
|
|
|
|
* @see IslandoraWebTestCase::getInfo()
|
|
|
|
*/
|
|
|
|
public static function getInfo() {
|
|
|
|
return array(
|
|
|
|
'name' => 'Islandora Datastream Versions',
|
|
|
|
'description' => 'Tests the functionality related to datastream versions in Islandora.',
|
|
|
|
'group' => 'Islandora',
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create an object with many datastram versions.
|
|
|
|
*
|
|
|
|
* @see IslandoraWebTestCase::setUp()
|
|
|
|
*/
|
|
|
|
public function setUp() {
|
|
|
|
parent::setUp();
|
|
|
|
|
|
|
|
$this->pid = $this->randomName() . ":" . $this->randomName();
|
|
|
|
$tuque = islandora_get_tuque_connection();
|
|
|
|
$object = $tuque->repository->constructObject($this->pid);
|
|
|
|
$object = $tuque->repository->ingestObject($object);
|
|
|
|
$this->dsid = $this->randomName();
|
|
|
|
$ds = $object->constructDatastream($this->dsid);
|
|
|
|
$ds->label = 'Test';
|
|
|
|
$ds->content = 'test';
|
|
|
|
$object->ingestDatastream($ds);
|
|
|
|
|
|
|
|
// Create three versions.
|
|
|
|
$ds->mimetype = 'application/pdf';
|
|
|
|
$ds->label = 'jaaaaa maaaan';
|
|
|
|
$ds->content = 'Tests... are the bests.';
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Free any objects/resources created for this test.
|
|
|
|
*
|
|
|
|
* @see IslandoraWebTestCase::tearDown()
|
|
|
|
*/
|
|
|
|
public function tearDown() {
|
|
|
|
$tuque = islandora_get_tuque_connection();
|
|
|
|
$tuque->repository->purgeObject($this->pid);
|
|
|
|
|
|
|
|
parent::tearDown();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if the user can see datastream versions in the datastream table.
|
|
|
|
*/
|
|
|
|
public function testSeeDatastreamVersions() {
|
|
|
|
$user = $this->drupalCreateUser(array(
|
|
|
|
'view fedora repository objects',
|
|
|
|
'ingest fedora objects',
|
|
|
|
'view old datastream versions',
|
|
|
|
'add fedora datastreams',
|
|
|
|
));
|
|
|
|
$this->drupalLogin($user);
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/manage/datastreams");
|
|
|
|
$this->assertLink($this->dsid);
|
|
|
|
$this->assertLink("4");
|
|
|
|
$encoded_pid = urlencode($this->pid);
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check that users without permission cannot see datastream versions.
|
|
|
|
*/
|
|
|
|
public function testNotSeeDatastreamVersions() {
|
|
|
|
$user = $this->drupalCreateUser(array(
|
|
|
|
'view fedora repository objects',
|
|
|
|
'ingest fedora objects',
|
|
|
|
'add fedora datastreams',
|
|
|
|
));
|
|
|
|
$this->drupalLogin($user);
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/manage/datastreams");
|
|
|
|
$this->assertLink($this->dsid);
|
|
|
|
$this->assertNoLink("4");
|
|
|
|
$encoded_pid = urlencode($this->pid);
|
|
|
|
$this->assertNoLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check that users without permission cannot see datastream version pages.
|
|
|
|
*/
|
|
|
|
public function testDatastreamVersionPermissions() {
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version");
|
|
|
|
$this->assertResponse(403);
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version/0/view");
|
|
|
|
$this->assertResponse(403);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check that the proper infomration is displayed on the ds version page.
|
|
|
|
*/
|
|
|
|
public function testDatastreamVersionPage() {
|
|
|
|
$user = $this->drupalCreateUser(array(
|
|
|
|
'view old datastream versions',
|
|
|
|
));
|
|
|
|
$this->drupalLogin($user);
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version");
|
|
|
|
$this->assertNoLink("Delete");
|
|
|
|
$this->assertText("text/xml");
|
|
|
|
$this->assertText("application/pdf");
|
|
|
|
$this->assertText("jaaaaa maaaan");
|
|
|
|
$this->assertText("Test");
|
|
|
|
|
|
|
|
$encoded_pid = urlencode($this->pid);
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version/0/view");
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version/1/view");
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version/2/view");
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version/3/view");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Make sure the correct content is displayed for each datastream version.
|
|
|
|
*/
|
|
|
|
public function testDatastreamVersionContent() {
|
|
|
|
$user = $this->drupalCreateUser(array(
|
|
|
|
'view old datastream versions',
|
|
|
|
));
|
|
|
|
$this->drupalLogin($user);
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version/3/view");
|
|
|
|
$content = $this->drupalGetContent();
|
|
|
|
if ($content != 'test') {
|
|
|
|
$this->fail("Incorrect datastream content");
|
|
|
|
}
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version/2/view");
|
|
|
|
$content = $this->drupalGetContent();
|
|
|
|
if ($content != 'test') {
|
|
|
|
$this->fail("Incorrect datastream content");
|
|
|
|
}
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version/1/view");
|
|
|
|
$content = $this->drupalGetContent();
|
|
|
|
if ($content != 'test') {
|
|
|
|
$this->fail("Incorrect datastream content");
|
|
|
|
}
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version/0/view");
|
|
|
|
$content = $this->drupalGetContent();
|
|
|
|
if ($content != 'Tests... are the bests.') {
|
|
|
|
$this->fail("Incorrect datastream content");
|
|
|
|
}
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version/5/view");
|
|
|
|
$this->assertResponse(404);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Make sure you can delete datastream versions.
|
|
|
|
*/
|
|
|
|
public function testDatastreamVersionDelete() {
|
|
|
|
$user = $this->drupalCreateUser(array(
|
|
|
|
'view old datastream versions',
|
|
|
|
'delete fedora objects and datastreams',
|
|
|
|
));
|
|
|
|
$this->drupalLogin($user);
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version");
|
|
|
|
$this->assertLink("delete");
|
|
|
|
$this->assertText('text/xml');
|
|
|
|
|
|
|
|
$encoded_pid = urlencode($this->pid);
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version/0/delete");
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version/1/delete");
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version/2/delete");
|
|
|
|
$this->assertLinkByHref("islandora/object/$encoded_pid/datastream/{$this->dsid}/version/3/delete");
|
|
|
|
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version/3/delete");
|
|
|
|
$this->drupalPost(NULL, array(), t('Delete'));
|
|
|
|
$this->assertNoText('text/xml');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Make sure you can't delete versions that don't exist/have only 1 version.
|
|
|
|
*/
|
|
|
|
public function testDatastreamVersionDeleteEdgeCase() {
|
|
|
|
$user = $this->drupalCreateUser(array(
|
|
|
|
'view old datastream versions',
|
|
|
|
'delete fedora objects and datastreams',
|
|
|
|
));
|
|
|
|
$this->drupalLogin($user);
|
|
|
|
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/{$this->dsid}/version/6/delete");
|
|
|
|
$this->assertResponse(404);
|
|
|
|
|
|
|
|
$this->drupalGet("islandora/object/{$this->pid}/datastream/DC/version/0/delete");
|
|
|
|
$this->assertResponse(404);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|