Nelson Hart
12 years ago
8 changed files with 350 additions and 14 deletions
@ -0,0 +1,118 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Tests to see if the hooks get called when appropriate. |
||||||
|
* |
||||||
|
* In the test module 'islandora_hooks_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_hooks_test.module. |
||||||
|
*/ |
||||||
|
|
||||||
|
class IslandoraIngestsTestCase extends IslandoraWebTestCase { |
||||||
|
|
||||||
|
/** |
||||||
|
* Gets info to display to describe this test. |
||||||
|
* |
||||||
|
* @see IslandoraWebTestCase::getInfo() |
||||||
|
*/ |
||||||
|
public static function getInfo() { |
||||||
|
return array( |
||||||
|
'name' => 'Islandora Ingestion', |
||||||
|
'description' => 'Ensure that the ingest forms function correctly.', |
||||||
|
'group' => 'Islandora', |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Creates an admin user and a connection to a fedora repository. |
||||||
|
* |
||||||
|
* @see IslandoraWebTestCase::setUp() |
||||||
|
*/ |
||||||
|
public function setUp() { |
||||||
|
parent::setUp('islandora_ingest_test'); |
||||||
|
$this->repository = $this->admin->repository; |
||||||
|
$this->purgeTestObjects(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Free any objects/resources created for this test. |
||||||
|
* |
||||||
|
* @see IslandoraWebTestCase::tearDown() |
||||||
|
*/ |
||||||
|
public function tearDown() { |
||||||
|
$this->purgeTestObjects(); |
||||||
|
unset($this->repository); |
||||||
|
parent::tearDown(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Purge any objects created by the test's in this class. |
||||||
|
*/ |
||||||
|
public function purgeTestObjects() { |
||||||
|
$objects = array( |
||||||
|
'test:test', |
||||||
|
); |
||||||
|
foreach ($objects as $object) { |
||||||
|
try { |
||||||
|
$object = $this->repository->getObject($object); |
||||||
|
$this->repository->purgeObject($object->id); |
||||||
|
} |
||||||
|
catch (Exception $e) { |
||||||
|
// Meh... Either it didn't exist or the purge failed. |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Test Ingest Steps. |
||||||
|
*/ |
||||||
|
public function testIngest() { |
||||||
|
// Login the Admin user. |
||||||
|
$this->drupalLogin($this->admin); |
||||||
|
// First step in form. |
||||||
|
$this->drupalGet('test/ingest'); |
||||||
|
// Default model selected, has no additional steps. |
||||||
|
$this->assertFieldByName('ingest', 'Ingest'); |
||||||
|
// Select a model with additional steps. |
||||||
|
$edit = array( |
||||||
|
'model' => 'test:testcmodel', |
||||||
|
); |
||||||
|
$this->drupalPostAJAX(NULL, $edit, 'model'); |
||||||
|
// Form now reflexts multiple steps. |
||||||
|
$this->assertFieldByName('label', ''); |
||||||
|
$this->assertFieldByName('next', 'Next'); |
||||||
|
// Move to next step. |
||||||
|
$edit = array( |
||||||
|
'label' => 'foobar', |
||||||
|
'model' => 'test:testcmodel', |
||||||
|
); |
||||||
|
$this->drupalPost(NULL, $edit, t('Next')); |
||||||
|
$this->assertFieldByName('form_step_id', 'islandora_ingest_test_testcmodel'); |
||||||
|
$this->assertFieldByName('ingest', 'Ingest'); |
||||||
|
// Move back to first step. |
||||||
|
$this->drupalPost(NULL, array(), t('Previous')); |
||||||
|
// Try a different model that has an additional step. |
||||||
|
$edit = array( |
||||||
|
'model' => 'test:testcmodel2', |
||||||
|
); |
||||||
|
$this->drupalPostAJAX(NULL, $edit, 'model'); |
||||||
|
$edit = array( |
||||||
|
'label' => 'foobar', |
||||||
|
'model' => 'test:testcmodel2', |
||||||
|
); |
||||||
|
$this->drupalPost(NULL, $edit, t('Next')); |
||||||
|
$this->assertFieldByName('form_step_id', 'islandora_ingest_test_testcmodel2'); |
||||||
|
$this->assertFieldByName('ingest', 'Ingest'); |
||||||
|
// Ingest the thing. |
||||||
|
$this->drupalPost(NULL, array(), t('Ingest')); |
||||||
|
// Test that the thing got made. |
||||||
|
$object = islandora_object_load('test:test'); |
||||||
|
$this->assertEqual($object->label, 'foobar', 'Ingest Object matches submitted form values.'); |
||||||
|
$this->assertEqual($object->models, array('test:testcmodel2', 'fedora-system:FedoraObject-3.0'), 'Ingest Object matches submitted form values.'); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
name = Islandora Testing |
||||||
|
description = Required for testing islandora web-test case. |
||||||
|
core = 7.x |
||||||
|
package = Testing |
||||||
|
hidden = TRUE |
||||||
|
dependencies[] = islandora |
||||||
|
files[] = islandora_test.module |
@ -0,0 +1,166 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Implements hooks that get tested by islandora_hooks.test |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook menu. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_menu() { |
||||||
|
return array( |
||||||
|
'test/ingest' => array( |
||||||
|
'title' => 'Ingest Form', |
||||||
|
'page callback' => 'islandora_ingest_test_ingest', |
||||||
|
'type' => MENU_LOCAL_ACTION, |
||||||
|
'access callback' => TRUE, |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Render the ingest form. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_ingest() { |
||||||
|
$connection = islandora_get_tuque_connection(); |
||||||
|
$object = $connection->repository->constructObject('test:test'); |
||||||
|
$object->label = 'New Object'; |
||||||
|
$configuration = array( |
||||||
|
'objects' => array($object), |
||||||
|
); |
||||||
|
module_load_include('inc', 'islandora', 'includes/ingest.form'); |
||||||
|
return drupal_get_form('islandora_ingest_form', $configuration); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_islandora_ingest_steps(). |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_islandora_ingest_steps(array &$form_state) { |
||||||
|
return array( |
||||||
|
'islandora_ingest_test' => array( |
||||||
|
'type' => 'form', |
||||||
|
'form_id' => 'islandora_ingest_test_set_label_form', |
||||||
|
'weight' => -50, |
||||||
|
'module' => 'islandora_ingest_test', |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_MODEL_PID_islandora_ingest_steps(). |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_test_testcmodel_islandora_ingest_steps(array &$form_state) { |
||||||
|
return array( |
||||||
|
'islandora_ingest_test_testcmodel' => array( |
||||||
|
'type' => 'form', |
||||||
|
'form_id' => 'islandora_ingest_test_testcmodel_form', |
||||||
|
'weight' => -30, |
||||||
|
'module' => 'islandora_ingest_test', |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_MODEL_PID_islandora_ingest_steps(). |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_test_testcmodel2_islandora_ingest_steps(array &$form_state) { |
||||||
|
return array( |
||||||
|
'islandora_ingest_test_testcmodel2' => array( |
||||||
|
'type' => 'form', |
||||||
|
'form_id' => 'islandora_ingest_test_testcmodel2_form', |
||||||
|
'weight' => -40, |
||||||
|
'module' => 'islandora_ingest_test', |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Sets the label of the ingestable object. |
||||||
|
* |
||||||
|
* @param array $form |
||||||
|
* The Drupal form. |
||||||
|
* @param array $form_state |
||||||
|
* The Drupal form state. |
||||||
|
* |
||||||
|
* @return array |
||||||
|
* The Drupal form definition. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_set_label_form(array $form, array &$form_state) { |
||||||
|
$models = array('test:nomorestepscmodel', 'test:testcmodel', 'test:testcmodel2'); |
||||||
|
$model = isset($form_state['values']['model']) ? $form_state['values']['model'] : reset($models); |
||||||
|
$shared_storage = &islandora_ingest_form_get_shared_storage($form_state); |
||||||
|
$shared_storage['models'] = array($model); |
||||||
|
return array( |
||||||
|
'#prefix' => '<div id="islandora-select-content-model-wrapper">', |
||||||
|
'#suffix' => '</div>', |
||||||
|
'label' => array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Label'), |
||||||
|
), |
||||||
|
'model' => array( |
||||||
|
'#type' => 'select', |
||||||
|
'#title' => t('Select a Content Model to Ingest'), |
||||||
|
'#options' => array_combine($models, $models), |
||||||
|
'#default' => $model, |
||||||
|
'#ajax' => array( |
||||||
|
'callback' => 'islandora_ingest_test_model_ajax_callback', |
||||||
|
'wrapper' => 'islandora-select-content-model-wrapper', |
||||||
|
'method' => 'replace', |
||||||
|
'effect' => 'fade', |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Updates the model field. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_model_ajax_callback(array $form, array &$form_state) { |
||||||
|
return $form; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Sets the label of the ingestable object. |
||||||
|
* |
||||||
|
* @param array $form |
||||||
|
* The Drupal form. |
||||||
|
* @param array $form_state |
||||||
|
* The Drupal form state. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_set_label_form_submit(array $form, array &$form_state) { |
||||||
|
$object = islandora_ingest_form_get_object($form_state); |
||||||
|
$object->label = $form_state['values']['label']; |
||||||
|
unset($object->models); |
||||||
|
$object->models = array($form_state['values']['model']); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Test the First content model. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_testcmodel_form(array $form, array &$form_state) { |
||||||
|
return array( |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Test the CModel submit. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_testcmodel_form_submit(array $form, array &$form_state) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Test the second content model. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_testcmodel2_form(array $form, array &$form_state) { |
||||||
|
return array( |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Test the CModel submit. |
||||||
|
*/ |
||||||
|
function islandora_ingest_test_testcmodel2_form_submit(array $form, array &$form_state) { |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue