Drupal modules for browsing and managing Fedora-based digital repositories.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

185 lines
7.7 KiB

<?php
/**
* @file
* Tests to see if the hooks get called when appropriate.
*
* In the test module 'islandora_derivatives_test' there are implementations
* of hooks being tested. These implementations modifies the session, and
* that's how we test if the hook gets called.
*
* To make sense of these tests reference islandora_derivatives_test.module.
*/
class IslandoraDerivativesTestCase extends IslandoraWebTestCase {
/**
* Gets info to display to describe this test.
*
* @see IslandoraWebTestCase::getInfo()
*/
public static function getInfo() {
return array(
'name' => 'Islandora Derivative Generation',
'description' => 'Ensure that the derivative generation hooks return appropriate results.',
'group' => 'Islandora',
);
}
/**
* Creates an admin user and a connection to a fedora repository.
*
* @see IslandoraWebTestCase::setUp()
*/
public function setUp() {
parent::setUp(
array(
'islandora_derivatives_test',
)
);
$url = variable_get('islandora_base_url', 'http://localhost:8080/fedora');
$this->connection = new RepositoryConnection($url, $this->admin->name, $this->admin->pass);
$this->connection->reuseConnection = TRUE;
$this->api = new FedoraApi($this->connection);
$this->cache = new SimpleCache();
$this->repository = new FedoraRepository($this->api, $this->cache);
$this->pid = $this->randomName() . ":" . $this->randomName();
}
/**
* Free any objects/resources created for this test.
*
* @see IslandoraWebTestCase::tearDown()
*/
public function tearDown() {
$tuque = islandora_get_tuque_connection();
parent::tearDown();
}
public function testDerivativeOnIngest() {
global $ingest_method;
$ingest_method = 'modifyDatastream';
$tuque = islandora_get_tuque_connection();
$object = $tuque->repository->constructObject($this->pid);
$object->models = array(
'some:cmodel',
);
$dsid = 'OBJ';
$ds = $object->constructDatastream($dsid);
$ds->label = 'Test';
$ds->content = 'test';
$object->ingestDatastream($ds);
$tuque->repository->ingestObject($object);
$this->assertDatastreams($object, array(
'RELS-EXT',
'DC',
'OBJ',
'DERIV',
));
$this->assertEqual('ingestDatastream', $ingest_method, 'The expected ingest method is "ingestDatastream", got "' . $ingest_method . '".');
$this->assertEqual('test some string', $object['DERIV']->content, 'The expected content of the DERIV datastream is "test some string", got "' . $object['DERIV']->content . '".');
}
public function testDerivativeOnForceExistingDatastream() {
global $ingest_method;
$ingest_method = 'ingestDatastream';
$object = $this->constructBaseObject();
$this->constructDERIVDatastream($object);
$islandora_object = islandora_object_load($this->pid);
islandora_do_derivatives($islandora_object, array(
'force' => TRUE,
));
$this->assertEqual('modifyDatastream', $ingest_method, 'The expected ingest method is "modifyDatastream", got "' . $ingest_method . '".');
$this->assertEqual('FORCEFULLY APPENDING CONTENT TO test', $islandora_object['DERIV']->content, 'The expected content of the DERIV datastream is "FORCEFULLY APPENDING CONTENT TO test", got "' . $islandora_object['DERIV']->content . '".');
}
public function testDerivativeOnForceNonExistingDatastream() {
global $ingest_method;
$ingest_method = 'modifyDatastream';
$this->constructBaseObject();
$object = islandora_object_load($this->pid);
islandora_do_derivatives($object, array(
'force' => TRUE,
));
$this->assertEqual('ingestDatastream', $ingest_method, 'The expected ingest method is "ingestDatastream", got "' . $ingest_method . '".');
$this->assertEqual('FORCEFULLY APPENDING CONTENT TO test', $object['DERIV']->content, 'The expected content of the DERIV datastream is "FORCEFULLY APPENDING CONTENT TO test", got "' . $object['DERIV']->content . '".');
}
public function testDerivativeOnModifyExistingDatastream() {
global $ingest_method;
$ingest_method = 'ingestDatastream';
$object = $this->constructBaseObject();
$this->constructDERIVDatastream($object);
$connection = islandora_get_tuque_connection();
$connection->cache->resetCache();
$islandora_object = islandora_object_load($this->pid);
$changed_content = 'islandora beast';
$islandora_object['OBJ']->content = $changed_content;
$this->assertEqual('modifyDatastream', $ingest_method, 'The expected ingest method is "modifyDatastream", got "' . $ingest_method . '".');
$this->assertEqual('FORCEFULLY APPENDING CONTENT TO ' . $changed_content, $islandora_object['DERIV']->content, 'The expected content of the DERIV datastream is "FORCEFULLY APPENDING CONTENT TO islandora beast", got "' . $islandora_object['DERIV']->content . '".');
}
public function testDerivativeOnModifyNonExistingDatastream() {
global $ingest_method;
$ingest_method = 'modifyDatastream';
$this->constructBaseObject();
// Need to do this as Tuque caches.
$connection = islandora_get_tuque_connection();
$connection->cache->resetCache();
$islandora_object = islandora_object_load($this->pid);
$changed_content = 'islandora beast';
$islandora_object['OBJ']->content = $changed_content;
$this->assertEqual('ingestDatastream', $ingest_method, 'The expected ingest method is "ingestDatastream", got "' . $ingest_method . '".');
$this->assertEqual('FORCEFULLY APPENDING CONTENT TO ' . $changed_content, $islandora_object['DERIV']->content, 'The expected content of the DERIV datastream is "FORCEFULLY APPENDING CONTENT TO islandora beast", got "' . $islandora_object['DERIV']->content . '".');
}
public function testDerivativeFilteringOnSourceDSID() {
global $derivative_functions;
$derivative_functions = array();
$this->constructBaseObject();
$object = islandora_object_load($this->pid);
islandora_do_derivatives($object, array(
'source_dsid' => 'OBJ',
));
$this->assertEqual(1, count($derivative_functions), 'Expected 1 derivative function for the source_dsid of "OBJ", got ' . count($derivative_functions) . '.');
$called_function = (string) reset($derivative_functions);
$this->assertEqual('islandora_derivatives_test_create_deriv_datastream', $called_function, 'Expected derivative function is "islandora_derivatives_test_create_deriv_datastream", got "' . $called_function . '".');
// Reset the derivative functions array as we are going to use it again.
$derivative_functions = array();
islandora_do_derivatives($object, array(
'source_dsid' => 'SOMEWEIRDDATASTREAM',
));
$this->assertEqual(1, count($derivative_functions), 'Expected 1 derivative function for the source_dsid of "SOMEWEIRDDATASTREAM", got ' . count($derivative_functions) . '.');
$called_function = (string) reset($derivative_functions);
$this->assertEqual('islandora_derivatives_test_create_some_weird_datastream', $called_function, 'Expected derivative function is "islandora_derivatives_test_create_some_weird_datastream", got "' . $called_function . '".');
}
/**
* Helper function that will construct a base object.
*/
public function constructBaseObject() {
$object = $this->repository->constructObject($this->pid);
$object->models = array(
'some:cmodel',
);
$dsid = 'OBJ';
$ds = $object->constructDatastream($dsid);
$ds->label = 'Test';
$ds->content = 'test';
$object->ingestDatastream($ds);
$this->repository->ingestObject($object);
return $object;
}
public function constructDERIVDatastream(AbstractObject $object) {
$dsid = 'DERIV';
$ds = $object->constructDatastream($dsid);
$ds->label = 'Test';
$ds->content = 'test';
$object->ingestDatastream($ds);
return $object;
}
}