Drupal PHP Cross Reference Content Management Systems

Source: /modules/php/php.test - 120 lines - 4600 bytes - Summary - Text - Print

   1  <?php
   2  
   3  /**
   4   * @file
   5   * Tests for php.module.
   6   */
   7  
   8  /**
   9   * Defines a base PHP test case class.
  10   */
  11  class PHPTestCase extends DrupalWebTestCase {
  12    protected $php_code_format;
  13  
  14    function setUp() {
  15      parent::setUp('php');
  16  
  17      // Create and login admin user.
  18      $admin_user = $this->drupalCreateUser(array('administer filters'));
  19      $this->drupalLogin($admin_user);
  20  
  21      // Verify that the PHP code text format was inserted.
  22      $php_format_id = 'php_code';
  23      $this->php_code_format = filter_format_load($php_format_id);
  24      $this->assertEqual($this->php_code_format->name, 'PHP code', t('PHP code text format was created.'));
  25  
  26      // Verify that the format has the PHP code filter enabled.
  27      $filters = filter_list_format($php_format_id);
  28      $this->assertTrue($filters['php_code']->status, t('PHP code filter is enabled.'));
  29  
  30      // Verify that the format exists on the administration page.
  31      $this->drupalGet('admin/config/content/formats');
  32      $this->assertText('PHP code', t('PHP code text format was created.'));
  33  
  34      // Verify that anonymous and authenticated user roles do not have access.
  35      $this->drupalGet('admin/config/content/formats/' . $php_format_id);
  36      $this->assertFieldByName('roles[' . DRUPAL_ANONYMOUS_RID . ']', FALSE, t('Anonymous users do not have access to PHP code format.'));
  37      $this->assertFieldByName('roles[' . DRUPAL_AUTHENTICATED_RID . ']', FALSE, t('Authenticated users do not have access to PHP code format.'));
  38    }
  39  
  40    /**
  41     * Creates a test node with PHP code in the body.
  42     *
  43     * @return stdObject Node object.
  44     */
  45    function createNodeWithCode() {
  46      return $this->drupalCreateNode(array('body' => array(LANGUAGE_NONE => array(array('value' => '<?php print "SimpleTest PHP was executed!"; ?>')))));
  47    }
  48  }
  49  
  50  /**
  51   * Tests to make sure the PHP filter actually evaluates PHP code when used.
  52   */
  53  class PHPFilterTestCase extends PHPTestCase {
  54    public static function getInfo() {
  55      return array(
  56        'name' => 'PHP filter functionality',
  57        'description' => 'Make sure that PHP filter properly evaluates PHP code when enabled.',
  58        'group' => 'PHP',
  59      );
  60    }
  61  
  62    /**
  63     * Makes sure that the PHP filter evaluates PHP code when used.
  64     */
  65    function testPHPFilter() {
  66      // Log in as a user with permission to use the PHP code text format.
  67      $php_code_permission = filter_permission_name(filter_format_load('php_code'));
  68      $web_user = $this->drupalCreateUser(array('access content', 'create page content', 'edit own page content', $php_code_permission));
  69      $this->drupalLogin($web_user);
  70  
  71      // Create a node with PHP code in it.
  72      $node = $this->createNodeWithCode();
  73  
  74      // Make sure that the PHP code shows up as text.
  75      $this->drupalGet('node/' . $node->nid);
  76      $this->assertText('print "SimpleTest PHP was executed!"', t('PHP code is displayed.'));
  77  
  78      // Change filter to PHP filter and see that PHP code is evaluated.
  79      $edit = array();
  80      $langcode = LANGUAGE_NONE;
  81      $edit["body[$langcode][0][format]"] = $this->php_code_format->format;
  82      $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
  83      $this->assertRaw(t('Basic page %title has been updated.', array('%title' => $node->title)), t('PHP code filter turned on.'));
  84  
  85      // Make sure that the PHP code shows up as text.
  86      $this->assertNoText('print "SimpleTest PHP was executed!"', t("PHP code isn't displayed."));
  87      $this->assertText('SimpleTest PHP was executed!', t('PHP code has been evaluated.'));
  88    }
  89  }
  90  
  91  /**
  92   * Tests to make sure access to the PHP filter is properly restricted.
  93   */
  94  class PHPAccessTestCase extends PHPTestCase {
  95    public static function getInfo() {
  96      return array(
  97        'name' => 'PHP filter access check',
  98        'description' => 'Make sure that users who don\'t have access to the PHP filter can\'t see it.',
  99        'group' => 'PHP',
 100      );
 101    }
 102  
 103    /**
 104     * Makes sure that the user can't use the PHP filter when not given access.
 105     */
 106    function testNoPrivileges() {
 107      // Create node with PHP filter enabled.
 108      $web_user = $this->drupalCreateUser(array('access content', 'create page content', 'edit own page content'));
 109      $this->drupalLogin($web_user);
 110      $node = $this->createNodeWithCode();
 111  
 112      // Make sure that the PHP code shows up as text.
 113      $this->drupalGet('node/' . $node->nid);
 114      $this->assertText('print', t('PHP code was not evaluated.'));
 115  
 116      // Make sure that user doesn't have access to filter.
 117      $this->drupalGet('node/' . $node->nid . '/edit');
 118      $this->assertNoRaw('<option value="' . $this->php_code_format->format . '">', t('PHP code format not available.'));
 119    }
 120  }

title

Description

title

Description

title

Description

title

title

Body