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
5.5 KiB

<?php
/**
* @file
* Tests to see if the hooks get called when appropriate.
*
* In the test module 'islandora_hooked_access_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_hooked_access_test.module.
*/
class IslandoraHookedAccessTestCase extends IslandoraWebTestCase {
/**
* Gets info to display to describe this test.
*
* @see IslandoraWebTestCase::getInfo()
*/
public static function getInfo() {
return array(
'name' => 'Islandora Hooked Access Callback',
'description' => 'Ensure that the hooked access callback returns appropriate results.',
'group' => 'Islandora',
);
}
/**
* Creates an admin user and a connection to a fedora repository.
*
* @see IslandoraWebTestCase::setUp()
*/
public function setUp() {
parent::setUp('islandora_hooked_access_test');
$this->repository = $this->admin->repository;
$this->objects = array(
'test:testAccessHook',
);
$this->op = FEDORA_VIEW_OBJECTS;
$this->other_op = FEDORA_INGEST;
$this->denied_op = FEDORA_PURGE;
$this->purgeTestObjects();
$this->dsid = 'asdf';
$this->createTestObjects();
$this->object = $this->repository->getObject('test:testAccessHook');
}
/**
* Free any objects/resources created for this test.
*
* @see IslandoraWebTestCase::tearDown()
*/
public function tearDown() {
$this->purgeTestObjects();
unset($this->repository);
unset($_SESSION['islandora_hooked_access_test']);
parent::tearDown();
}
/**
* Create the test object(s) to use during the test.
*/
public function createTestObjects() {
foreach ($this->objects as $object_id) {
$object = $this->repository->constructObject($object_id);
$object->label = $object_id;
$datastream = $object->constructDatastream($this->dsid, 'M');
$datastream->label = 'fdsa';
$datastream->mimetype = 'text/plain';
$datastream->content = 'Some kinda awesome content stuffs...';
$object->ingestDatastream($datastream);
$this->repository->ingestObject($object);
}
}
/**
* Purge any objects created by the test's in this class.
*/
public function purgeTestObjects() {
foreach ($this->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.
}
}
}
/**
* Deny an object permission check without an object.
*/
public function testDenyBadObject() {
$this->assertFalse(islandora_object_access($this->op, 'this is not an object'), 'Deny bad objects.');
}
/**
* Deny a datastream permission check without a datastream.
*/
public function testDenyBadDatastream() {
$this->assertFalse(islandora_datastream_access($this->op, 'this is not a datastream'), 'Deny bad datastreams.');
}
/**
* Allow operation on object.
*/
public function testAllowObject() {
$user = $this->drupalCreateUser(array($this->op));
$_SESSION['islandora_hooked_access_test'] = array(
$this->op,
$this->object,
$user,
);
$this->assertTrue(islandora_object_access($this->op, $this->object, $user), 'Allow object access.');
}
/**
* Allow operation on datastream.
*/
public function testAllowDatastream() {
$user = $this->drupalCreateUser(array($this->op));
$_SESSION['islandora_hooked_access_test'] = array(
$this->op,
$this->object['asdf'],
$user,
);
$this->assertTrue(islandora_datastream_access($this->op, $this->object['asdf'], $user), 'Allow datastream access.');
}
/**
* Deny an operation which was not explicitly allowed on an object.
*/
public function testDenyObjectImplicit() {
$user = $this->drupalCreateUser(array($this->other_op));
// This variable forces either a TRUE or FALSE from Islandora's
// implementation of hook_islandora_object_access().
variable_set('islandora_strict_user_access_enforcement', FALSE);
$_SESSION['islandora_hooked_access_test'] = array(
$this->other_op,
$this->object,
$user,
);
$this->assertFalse(islandora_object_access($this->op, $this->object, $user), 'Implied denial of object access.');
}
/**
* Deny an operation which was not explicitly allowed on a datastream.
*/
public function testDenyDatastreamImplicit() {
$user = $this->drupalCreateUser(array($this->other_op));
// This variable forces either a TRUE or FALSE from Islandora's
// implementation of hook_islandora_object_access().
variable_set('islandora_strict_user_access_enforcement', FALSE);
$_SESSION['islandora_hooked_access_test'] = array(
$this->other_op,
$this->object['asdf'],
$user,
);
$this->assertFalse(islandora_datastream_access($this->op, $this->object['asdf'], $user), 'Implied denial of datastream access.');
}
/**
* Deny an operation which was not explicitly allowed on an object.
*/
public function testDenyObjectExplicit() {
$this->assertFalse(islandora_object_access($this->denied_op, $this->object), 'Explicit denial of object access.');
}
/**
* Deny an operation which was not explicitly allowed on a datastream.
*/
public function testDenyDatastreamExplicit() {
$this->assertFalse(islandora_datastream_access($this->denied_op, $this->object['asdf']), 'Explicit denial of datastream access.');
}
}