<?php
/**
 * Base class for External Link tests.
 *
 * Provides common setup stuff and various helper functions
 */
class ExtlinkBaseWebTestCase extends DrupalWebTestCase {
  /**
   * User with various administrative permissions.
   * @var Drupal user
   */
  protected $admin_user;

  /**
   * Normal visitor with limited permissions
   * @var Drupal user;
   */
  protected $normal_user;
  
    /**
   * Drupal path of the (general) External Links admin page
   */
  const EXTLINK_ADMIN_PATH = 'admin/config/user-interface/extlink';
  
  function setUp() {
    // Enable any module that you will need in your tests.
    parent::setUp('extlink');

    // Create a normal user.
    $permissions = array(
      'access comments', 'post comments', 'skip comment approval',
      'access content', 'create page content', 'edit own page content',
    );
    $this->normal_user = $this->drupalCreateUser($permissions);

    // Create an admin user.
    $permissions[] = 'administer site configuration';
    $permissions[] = 'administer permissions';
    $permissions[] = 'administer content types';
    $this->admin_user = $this->drupalCreateUser($permissions);
  }
  
  protected function getNodeFormValues() {
    $edit = array(
      'title' => 'node_title ' . $this->randomName(32),
      'body[' . LANGUAGE_NONE . '][0][value]' => 'node_body ' . $this->randomName(256) . ' <a href="http://google.com">Google!</a>',
    );
    return $edit;
  }
  
  /**
   * Test if External Link is present
   */
  protected function assertExternalLinkPresence() {
    $elements = $this->xpath('//span[@class="ext"]');
    if (count($elements) > 0)
       $this->pass('There should be an External Link on the form.', 'External Links');
    else
       $this->fail('There should be an External Link on the form.', 'External Links');
  }
}

class ExtlinkTestCase extends ExtlinkBaseWebTestCase {
  public static function getInfo() {
    return array(
      'name' => t('General External Links functionality'),
      'description' => t('Testing the basic functionality of External Links'),
      'group' => t('External Links'),
    );
  }
}

class ExtlinkAdminTestCase extends ExtlinkBaseWebTestCase {
  public static function getInfo() {
    return array(
      'name' => t('External Links administration functionality'),
      'description' => t('Testing of the External Links administration interface and functionality.'),
      'group' => t('External Links'),
    );
  }

  /**
   * Test access to the admin pages.
   */
  function testAdminAccess() {
    $this->drupalLogin($this->normal_user);
    $this->drupalGet(self::EXTLINK_ADMIN_PATH);
    file_put_contents('tmp.simpletest.html', $this->drupalGetContent());
    $this->assertText(t('Access denied'), 'Normal users should not be able to access the External Links admin pages', 'External Links');

    $this->drupalLogin($this->admin_user);
    $this->drupalGet(self::EXTLINK_ADMIN_PATH);
    file_put_contents('tmp.simpletest.html', $this->drupalGetContent());
    $this->assertNoText(t('Access denied'), 'Admin users should be able to access the External Links admin pages', 'External Links');
  }
}
?>