Drupal PHP Cross Reference Content Management Systems

Source: /modules/simpletest/tests/entity_crud_hook_test.test - 338 lines - 12771 bytes - Summary - Text - Print

   1  <?php
   2  
   3  /**
   4   * @file
   5   * CRUD hook tests for the Entity CRUD API.
   6   */
   7  
   8  /**
   9   * Tests invocation of hooks when performing an action.
  10   *
  11   * Tested hooks are:
  12   * - hook_entity_insert()
  13   * - hook_entity_load()
  14   * - hook_entity_update()
  15   * - hook_entity_delete()
  16   * As well as all type-specific hooks, like hook_node_insert(),
  17   * hook_comment_update(), etc.
  18   */
  19  class EntityCrudHookTestCase extends DrupalWebTestCase {
  20  
  21    protected $ids = array();
  22  
  23    public static function getInfo() {
  24      return array(
  25        'name' => 'Entity CRUD hooks',
  26        'description' => 'Tests the invocation of hooks when inserting, loading, updating or deleting an entity.',
  27        'group' => 'Entity API',
  28      );
  29    }
  30  
  31    public function setUp() {
  32      parent::setUp('entity_crud_hook_test', 'taxonomy', 'comment');
  33    }
  34  
  35    /**
  36     * Pass if the message $text was set by one of the CRUD hooks in
  37     * entity_crud_hook_test.module, i.e., if the $text is an element of
  38     * $_SESSION['entity_crud_hook_test'].
  39     *
  40     * @param $text
  41     *   Plain text to look for.
  42     * @param $message
  43     *   Message to display.
  44     * @param $group
  45     *   The group this message belongs to, defaults to 'Other'.
  46     * @return
  47     *   TRUE on pass, FALSE on fail.
  48     */
  49    protected function assertHookMessage($text, $message = NULL, $group = 'Other') {
  50      if (!isset($message)) {
  51        $message = $text;
  52      }
  53      return $this->assertTrue(array_search($text, $_SESSION['entity_crud_hook_test']) !== FALSE, $message, $group);
  54    }
  55  
  56    /**
  57     * Tests hook invocations for CRUD operations on comments.
  58     */
  59    public function testCommentHooks() {
  60      $node = (object) array(
  61        'uid' => 1,
  62        'type' => 'article',
  63        'title' => 'Test node',
  64        'status' => 1,
  65        'comment' => 2,
  66        'promote' => 0,
  67        'sticky' => 0,
  68        'language' => LANGUAGE_NONE,
  69        'created' => REQUEST_TIME,
  70        'changed' => REQUEST_TIME,
  71      );
  72      node_save($node);
  73      $nid = $node->nid;
  74  
  75      $comment = (object) array(
  76        'cid' => NULL,
  77        'pid' => 0,
  78        'nid' => $nid,
  79        'uid' => 1,
  80        'subject' => 'Test comment',
  81        'created' => REQUEST_TIME,
  82        'changed' => REQUEST_TIME,
  83        'status' => 1,
  84        'language' => LANGUAGE_NONE,
  85      );
  86      $_SESSION['entity_crud_hook_test'] = array();
  87      comment_save($comment);
  88  
  89      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type comment');
  90      $this->assertHookMessage('entity_crud_hook_test_comment_presave called');
  91      $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type comment');
  92      $this->assertHookMessage('entity_crud_hook_test_comment_insert called');
  93  
  94      $_SESSION['entity_crud_hook_test'] = array();
  95      $comment = comment_load($comment->cid);
  96  
  97      $this->assertHookMessage('entity_crud_hook_test_entity_load called for type comment');
  98      $this->assertHookMessage('entity_crud_hook_test_comment_load called');
  99  
 100      $_SESSION['entity_crud_hook_test'] = array();
 101      $comment->subject = 'New subject';
 102      comment_save($comment);
 103  
 104      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type comment');
 105      $this->assertHookMessage('entity_crud_hook_test_comment_presave called');
 106      $this->assertHookMessage('entity_crud_hook_test_entity_update called for type comment');
 107      $this->assertHookMessage('entity_crud_hook_test_comment_update called');
 108  
 109      $_SESSION['entity_crud_hook_test'] = array();
 110      comment_delete($comment->cid);
 111  
 112      $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type comment');
 113      $this->assertHookMessage('entity_crud_hook_test_comment_delete called');
 114    }
 115  
 116    /**
 117     * Tests hook invocations for CRUD operations on files.
 118     */
 119    public function testFileHooks() {
 120      $url = 'public://entity_crud_hook_test.file';
 121      file_put_contents($url, 'Test test test');
 122      $file = (object) array(
 123        'fid' => NULL,
 124        'uid' => 1,
 125        'filename' => 'entity_crud_hook_test.file',
 126        'uri' => $url,
 127        'filemime' => 'text/plain',
 128        'filesize' => filesize($url),
 129        'status' => 1,
 130        'timestamp' => REQUEST_TIME,
 131      );
 132      $_SESSION['entity_crud_hook_test'] = array();
 133      file_save($file);
 134  
 135      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type file');
 136      $this->assertHookMessage('entity_crud_hook_test_file_presave called');
 137      $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type file');
 138      $this->assertHookMessage('entity_crud_hook_test_file_insert called');
 139  
 140      $_SESSION['entity_crud_hook_test'] = array();
 141      $file = file_load($file->fid);
 142  
 143      $this->assertHookMessage('entity_crud_hook_test_entity_load called for type file');
 144      $this->assertHookMessage('entity_crud_hook_test_file_load called');
 145  
 146      $_SESSION['entity_crud_hook_test'] = array();
 147      $file->filename = 'new.entity_crud_hook_test.file';
 148      file_save($file);
 149  
 150      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type file');
 151      $this->assertHookMessage('entity_crud_hook_test_file_presave called');
 152      $this->assertHookMessage('entity_crud_hook_test_entity_update called for type file');
 153      $this->assertHookMessage('entity_crud_hook_test_file_update called');
 154  
 155      $_SESSION['entity_crud_hook_test'] = array();
 156      file_delete($file);
 157  
 158      $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type file');
 159      $this->assertHookMessage('entity_crud_hook_test_file_delete called');
 160    }
 161  
 162    /**
 163     * Tests hook invocations for CRUD operations on nodes.
 164     */
 165    public function testNodeHooks() {
 166      $node = (object) array(
 167        'uid' => 1,
 168        'type' => 'article',
 169        'title' => 'Test node',
 170        'status' => 1,
 171        'comment' => 2,
 172        'promote' => 0,
 173        'sticky' => 0,
 174        'language' => LANGUAGE_NONE,
 175        'created' => REQUEST_TIME,
 176        'changed' => REQUEST_TIME,
 177      );
 178      $_SESSION['entity_crud_hook_test'] = array();
 179      node_save($node);
 180  
 181      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type node');
 182      $this->assertHookMessage('entity_crud_hook_test_node_presave called');
 183      $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type node');
 184      $this->assertHookMessage('entity_crud_hook_test_node_insert called');
 185  
 186      $_SESSION['entity_crud_hook_test'] = array();
 187      $node = node_load($node->nid);
 188  
 189      $this->assertHookMessage('entity_crud_hook_test_entity_load called for type node');
 190      $this->assertHookMessage('entity_crud_hook_test_node_load called');
 191  
 192      $_SESSION['entity_crud_hook_test'] = array();
 193      $node->title = 'New title';
 194      node_save($node);
 195  
 196      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type node');
 197      $this->assertHookMessage('entity_crud_hook_test_node_presave called');
 198      $this->assertHookMessage('entity_crud_hook_test_entity_update called for type node');
 199      $this->assertHookMessage('entity_crud_hook_test_node_update called');
 200  
 201      $_SESSION['entity_crud_hook_test'] = array();
 202      node_delete($node->nid);
 203  
 204      $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type node');
 205      $this->assertHookMessage('entity_crud_hook_test_node_delete called');
 206    }
 207  
 208    /**
 209     * Tests hook invocations for CRUD operations on taxonomy terms.
 210     */
 211    public function testTaxonomyTermHooks() {
 212      $vocabulary = (object) array(
 213        'name' => 'Test vocabulary',
 214        'machine_name' => 'test',
 215        'description' => NULL,
 216        'module' => 'entity_crud_hook_test',
 217      );
 218      taxonomy_vocabulary_save($vocabulary);
 219  
 220      $term = (object) array(
 221        'vid' => $vocabulary->vid,
 222        'name' => 'Test term',
 223        'description' => NULL,
 224        'format' => 1,
 225      );
 226      $_SESSION['entity_crud_hook_test'] = array();
 227      taxonomy_term_save($term);
 228  
 229      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_term');
 230      $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_presave called');
 231      $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type taxonomy_term');
 232      $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_insert called');
 233  
 234      $_SESSION['entity_crud_hook_test'] = array();
 235      $term = taxonomy_term_load($term->tid);
 236  
 237      $this->assertHookMessage('entity_crud_hook_test_entity_load called for type taxonomy_term');
 238      $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_load called');
 239  
 240      $_SESSION['entity_crud_hook_test'] = array();
 241      $term->name = 'New name';
 242      taxonomy_term_save($term);
 243  
 244      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_term');
 245      $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_presave called');
 246      $this->assertHookMessage('entity_crud_hook_test_entity_update called for type taxonomy_term');
 247      $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_update called');
 248  
 249      $_SESSION['entity_crud_hook_test'] = array();
 250      taxonomy_term_delete($term->tid);
 251  
 252      $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type taxonomy_term');
 253      $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_delete called');
 254    }
 255  
 256    /**
 257     * Tests hook invocations for CRUD operations on taxonomy vocabularies.
 258     */
 259    public function testTaxonomyVocabularyHooks() {
 260      $vocabulary = (object) array(
 261        'name' => 'Test vocabulary',
 262        'machine_name' => 'test',
 263        'description' => NULL,
 264        'module' => 'entity_crud_hook_test',
 265      );
 266      $_SESSION['entity_crud_hook_test'] = array();
 267      taxonomy_vocabulary_save($vocabulary);
 268  
 269      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_vocabulary');
 270      $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_presave called');
 271      $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type taxonomy_vocabulary');
 272      $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_insert called');
 273  
 274      $_SESSION['entity_crud_hook_test'] = array();
 275      $vocabulary = taxonomy_vocabulary_load($vocabulary->vid);
 276  
 277      $this->assertHookMessage('entity_crud_hook_test_entity_load called for type taxonomy_vocabulary');
 278      $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_load called');
 279  
 280      $_SESSION['entity_crud_hook_test'] = array();
 281      $vocabulary->name = 'New name';
 282      taxonomy_vocabulary_save($vocabulary);
 283  
 284      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_vocabulary');
 285      $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_presave called');
 286      $this->assertHookMessage('entity_crud_hook_test_entity_update called for type taxonomy_vocabulary');
 287      $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_update called');
 288  
 289      $_SESSION['entity_crud_hook_test'] = array();
 290      taxonomy_vocabulary_delete($vocabulary->vid);
 291  
 292      $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type taxonomy_vocabulary');
 293      $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_delete called');
 294    }
 295  
 296    /**
 297     * Tests hook invocations for CRUD operations on users.
 298     */
 299    public function testUserHooks() {
 300      $edit = array(
 301        'name' => 'Test user',
 302        'mail' => 'test@example.com',
 303        'created' => REQUEST_TIME,
 304        'status' => 1,
 305        'language' => 'en',
 306      );
 307      $account = (object) $edit;
 308      $_SESSION['entity_crud_hook_test'] = array();
 309      $account = user_save($account, $edit);
 310  
 311      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type user');
 312      $this->assertHookMessage('entity_crud_hook_test_user_presave called');
 313      $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type user');
 314      $this->assertHookMessage('entity_crud_hook_test_user_insert called');
 315  
 316      $_SESSION['entity_crud_hook_test'] = array();
 317      $account = user_load($account->uid);
 318  
 319      $this->assertHookMessage('entity_crud_hook_test_entity_load called for type user');
 320      $this->assertHookMessage('entity_crud_hook_test_user_load called');
 321  
 322      $_SESSION['entity_crud_hook_test'] = array();
 323      $edit['name'] = 'New name';
 324      $account = user_save($account, $edit);
 325  
 326      $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type user');
 327      $this->assertHookMessage('entity_crud_hook_test_user_presave called');
 328      $this->assertHookMessage('entity_crud_hook_test_entity_update called for type user');
 329      $this->assertHookMessage('entity_crud_hook_test_user_update called');
 330  
 331      $_SESSION['entity_crud_hook_test'] = array();
 332      user_delete($account->uid);
 333  
 334      $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type user');
 335      $this->assertHookMessage('entity_crud_hook_test_user_delete called');
 336    }
 337  
 338  }

title

Description

title

Description

title

Description

title

title

Body