'Entity CRUD hooks', 'description' => 'Tests the invocation of hooks when inserting, loading, updating or deleting an entity.', 'group' => 'Entity API', ); } public function setUp() { parent::setUp('entity_crud_hook_test', 'taxonomy', 'comment'); } /** * Pass if the message $text was set by one of the CRUD hooks in * entity_crud_hook_test.module, i.e., if the $text is an element of * $_SESSION['entity_crud_hook_test']. * * @param $text * Plain text to look for. * @param $message * Message to display. * @param $group * The group this message belongs to, defaults to 'Other'. * @return * TRUE on pass, FALSE on fail. */ protected function assertHookMessage($text, $message = NULL, $group = 'Other') { if (!isset($message)) { $message = $text; } return $this->assertTrue(array_search($text, $_SESSION['entity_crud_hook_test']) !== FALSE, $message, $group); } /** * Tests hook invocations for CRUD operations on comments. */ public function testCommentHooks() { $node = (object) array( 'uid' => 1, 'type' => 'article', 'title' => 'Test node', 'status' => 1, 'comment' => 2, 'promote' => 0, 'sticky' => 0, 'language' => LANGUAGE_NONE, 'created' => REQUEST_TIME, 'changed' => REQUEST_TIME, ); node_save($node); $nid = $node->nid; $comment = (object) array( 'cid' => NULL, 'pid' => 0, 'nid' => $nid, 'uid' => 1, 'subject' => 'Test comment', 'created' => REQUEST_TIME, 'changed' => REQUEST_TIME, 'status' => 1, 'language' => LANGUAGE_NONE, ); $_SESSION['entity_crud_hook_test'] = array(); comment_save($comment); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type comment'); $this->assertHookMessage('entity_crud_hook_test_comment_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type comment'); $this->assertHookMessage('entity_crud_hook_test_comment_insert called'); $_SESSION['entity_crud_hook_test'] = array(); $comment = comment_load($comment->cid); $this->assertHookMessage('entity_crud_hook_test_entity_load called for type comment'); $this->assertHookMessage('entity_crud_hook_test_comment_load called'); $_SESSION['entity_crud_hook_test'] = array(); $comment->subject = 'New subject'; comment_save($comment); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type comment'); $this->assertHookMessage('entity_crud_hook_test_comment_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_update called for type comment'); $this->assertHookMessage('entity_crud_hook_test_comment_update called'); $_SESSION['entity_crud_hook_test'] = array(); comment_delete($comment->cid); $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type comment'); $this->assertHookMessage('entity_crud_hook_test_comment_delete called'); } /** * Tests hook invocations for CRUD operations on files. */ public function testFileHooks() { $url = 'public://entity_crud_hook_test.file'; file_put_contents($url, 'Test test test'); $file = (object) array( 'fid' => NULL, 'uid' => 1, 'filename' => 'entity_crud_hook_test.file', 'uri' => $url, 'filemime' => 'text/plain', 'filesize' => filesize($url), 'status' => 1, 'timestamp' => REQUEST_TIME, ); $_SESSION['entity_crud_hook_test'] = array(); file_save($file); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type file'); $this->assertHookMessage('entity_crud_hook_test_file_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type file'); $this->assertHookMessage('entity_crud_hook_test_file_insert called'); $_SESSION['entity_crud_hook_test'] = array(); $file = file_load($file->fid); $this->assertHookMessage('entity_crud_hook_test_entity_load called for type file'); $this->assertHookMessage('entity_crud_hook_test_file_load called'); $_SESSION['entity_crud_hook_test'] = array(); $file->filename = 'new.entity_crud_hook_test.file'; file_save($file); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type file'); $this->assertHookMessage('entity_crud_hook_test_file_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_update called for type file'); $this->assertHookMessage('entity_crud_hook_test_file_update called'); $_SESSION['entity_crud_hook_test'] = array(); file_delete($file); $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type file'); $this->assertHookMessage('entity_crud_hook_test_file_delete called'); } /** * Tests hook invocations for CRUD operations on nodes. */ public function testNodeHooks() { $node = (object) array( 'uid' => 1, 'type' => 'article', 'title' => 'Test node', 'status' => 1, 'comment' => 2, 'promote' => 0, 'sticky' => 0, 'language' => LANGUAGE_NONE, 'created' => REQUEST_TIME, 'changed' => REQUEST_TIME, ); $_SESSION['entity_crud_hook_test'] = array(); node_save($node); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type node'); $this->assertHookMessage('entity_crud_hook_test_node_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type node'); $this->assertHookMessage('entity_crud_hook_test_node_insert called'); $_SESSION['entity_crud_hook_test'] = array(); $node = node_load($node->nid); $this->assertHookMessage('entity_crud_hook_test_entity_load called for type node'); $this->assertHookMessage('entity_crud_hook_test_node_load called'); $_SESSION['entity_crud_hook_test'] = array(); $node->title = 'New title'; node_save($node); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type node'); $this->assertHookMessage('entity_crud_hook_test_node_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_update called for type node'); $this->assertHookMessage('entity_crud_hook_test_node_update called'); $_SESSION['entity_crud_hook_test'] = array(); node_delete($node->nid); $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type node'); $this->assertHookMessage('entity_crud_hook_test_node_delete called'); } /** * Tests hook invocations for CRUD operations on taxonomy terms. */ public function testTaxonomyTermHooks() { $vocabulary = (object) array( 'name' => 'Test vocabulary', 'machine_name' => 'test', 'description' => NULL, 'module' => 'entity_crud_hook_test', ); taxonomy_vocabulary_save($vocabulary); $term = (object) array( 'vid' => $vocabulary->vid, 'name' => 'Test term', 'description' => NULL, 'format' => 1, ); $_SESSION['entity_crud_hook_test'] = array(); taxonomy_term_save($term); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_term'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type taxonomy_term'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_insert called'); $_SESSION['entity_crud_hook_test'] = array(); $term = taxonomy_term_load($term->tid); $this->assertHookMessage('entity_crud_hook_test_entity_load called for type taxonomy_term'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_load called'); $_SESSION['entity_crud_hook_test'] = array(); $term->name = 'New name'; taxonomy_term_save($term); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_term'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_update called for type taxonomy_term'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_update called'); $_SESSION['entity_crud_hook_test'] = array(); taxonomy_term_delete($term->tid); $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type taxonomy_term'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_delete called'); } /** * Tests hook invocations for CRUD operations on taxonomy vocabularies. */ public function testTaxonomyVocabularyHooks() { $vocabulary = (object) array( 'name' => 'Test vocabulary', 'machine_name' => 'test', 'description' => NULL, 'module' => 'entity_crud_hook_test', ); $_SESSION['entity_crud_hook_test'] = array(); taxonomy_vocabulary_save($vocabulary); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_vocabulary'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type taxonomy_vocabulary'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_insert called'); $_SESSION['entity_crud_hook_test'] = array(); $vocabulary = taxonomy_vocabulary_load($vocabulary->vid); $this->assertHookMessage('entity_crud_hook_test_entity_load called for type taxonomy_vocabulary'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_load called'); $_SESSION['entity_crud_hook_test'] = array(); $vocabulary->name = 'New name'; taxonomy_vocabulary_save($vocabulary); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_vocabulary'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_update called for type taxonomy_vocabulary'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_update called'); $_SESSION['entity_crud_hook_test'] = array(); taxonomy_vocabulary_delete($vocabulary->vid); $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type taxonomy_vocabulary'); $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_delete called'); } /** * Tests hook invocations for CRUD operations on users. */ public function testUserHooks() { $edit = array( 'name' => 'Test user', 'mail' => 'test@example.com', 'created' => REQUEST_TIME, 'status' => 1, 'language' => 'en', ); $account = (object) $edit; $_SESSION['entity_crud_hook_test'] = array(); $account = user_save($account, $edit); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type user'); $this->assertHookMessage('entity_crud_hook_test_user_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type user'); $this->assertHookMessage('entity_crud_hook_test_user_insert called'); $_SESSION['entity_crud_hook_test'] = array(); $account = user_load($account->uid); $this->assertHookMessage('entity_crud_hook_test_entity_load called for type user'); $this->assertHookMessage('entity_crud_hook_test_user_load called'); $_SESSION['entity_crud_hook_test'] = array(); $edit['name'] = 'New name'; $account = user_save($account, $edit); $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type user'); $this->assertHookMessage('entity_crud_hook_test_user_presave called'); $this->assertHookMessage('entity_crud_hook_test_entity_update called for type user'); $this->assertHookMessage('entity_crud_hook_test_user_update called'); $_SESSION['entity_crud_hook_test'] = array(); user_delete($account->uid); $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type user'); $this->assertHookMessage('entity_crud_hook_test_user_delete called'); } }