'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); } }