You are here

hreflang.test in Hreflang 7

Functional tests for Hreflang.

File

hreflang.test
View source
<?php

/**
 * @file
 * Functional tests for Hreflang.
 */

/**
 * Functional tests for Hreflang.
 */
class HreflangTest extends DrupalWebTestCase {

  /**
   * {@inheritdoc}
   */
  public static function getInfo() {
    return array(
      'name' => 'Hreflang',
      'description' => 'Tests for presence of the hreflang link element.',
      'group' => 'Hreflang',
    );
  }

  /**
   * {@inheritdoc}
   */
  public function setUp() {
    parent::setUp('hreflang', 'locale');

    // User to add language.
    $this->adminUser = $this
      ->drupalCreateUser(array(
      'access administration pages',
      'administer languages',
    ));
    $this
      ->drupalLogin($this->adminUser);

    // Add predefined language.
    $edit = array(
      'langcode' => 'fr',
    );
    $this
      ->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
  }

  /**
   * Test that hreflang link tags are added with URL detection.
   */
  public function testHreflangMarkup() {
    global $base_url;

    // Enable language detection.
    $edit = array(
      'language[enabled][locale-url]' => 1,
    );
    $this
      ->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
    $url = $base_url . '/';
    $path = variable_get('clean_url', 0) ? 'fr' : '?q=fr';
    $this
      ->drupalGet('');
    $this
      ->assertRaw('<link href="' . $url . $path . '" rel="alternate" hreflang="fr" />', 'French hreflang found on English page.');
    $this
      ->assertRaw('<link href="' . $url . '" rel="alternate" hreflang="en" />', 'English hreflang found on English page.');
    $this
      ->drupalGet('fr');
    $this
      ->assertRaw('<link href="' . $url . $path . '" rel="alternate" hreflang="fr" />', 'French hreflang found on French page.');
    $this
      ->assertRaw('<link href="' . $url . '" rel="alternate" hreflang="en" />', 'English hreflang found on French page.');
  }

  /**
   * Test that hreflang link tags are added with session detection.
   */
  public function testHreflangMarkupSession() {
    global $base_url;

    // Enable language detection.
    $edit = array(
      'language[enabled][locale-session]' => 1,
    );
    $this
      ->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
    $url = $base_url . '/';
    $french = '?language=fr';
    $english = '?language=en';
    $this
      ->drupalGet('');
    $this
      ->assertRaw('<link href="' . $url . $french . '" rel="alternate" hreflang="fr" />', 'French hreflang found on default page.');
    $this
      ->assertRaw('<link href="' . $url . '" rel="alternate" hreflang="en" />', 'English hreflang found on default page.');
    $this
      ->drupalGet('', array(
      'query' => array(
        'language' => 'en',
      ),
    ));
    $this
      ->assertRaw('<link href="' . $url . $french . '" rel="alternate" hreflang="fr" />', 'French hreflang found on English page.');
    $this
      ->assertRaw('<link href="' . $url . $english . '" rel="alternate" hreflang="en" />', 'English hreflang found on English page.');
    $this
      ->drupalGet('', array(
      'query' => array(
        'language' => 'fr',
      ),
    ));
    $this
      ->assertRaw('<link href="' . $url . $french . '" rel="alternate" hreflang="fr" />', 'French hreflang found on French page.');
    $this
      ->assertRaw('<link href="' . $url . $english . '" rel="alternate" hreflang="en" />', 'English hreflang found on French page.');
  }

}

/**
 * Functional tests for Hreflang with Content translation.
 */
class HreflangContentTranslationTest extends DrupalWebTestCase {

  /**
   * {@inheritdoc}
   */
  public static function getInfo() {
    return array(
      'name' => 'Hreflang with Content translation',
      'description' => 'Tests for presence of the hreflang link element on translated nodes.',
      'group' => 'Hreflang',
    );
  }

  /**
   * {@inheritdoc}
   */
  public function setUp() {
    parent::setUp('hreflang', 'locale', 'translation');
  }

  /**
   * Test that Content translation doesn't trigger an exception.
   */
  public function testHreflangContentTranslation() {

    // User to add language.
    $admin_user = $this
      ->drupalCreateUser(array(
      'access administration pages',
      'access content',
      'administer content types',
      'administer languages',
      'create page content',
    ));
    $this
      ->drupalLogin($admin_user);

    // Add predefined language.
    $edit = array(
      'langcode' => 'fr',
    );
    $this
      ->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));

    // Enable language detection.
    $edit = array(
      'language[enabled][locale-url]' => 1,
    );
    $this
      ->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));

    // Set "Basic page" content type to use translation.
    $this
      ->drupalGet('admin/structure/types/manage/page');
    $edit = array();
    $edit['language_content_type'] = 2;
    $this
      ->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));

    // Create an English-language node.
    $edit = array();
    $edit['title'] = $this
      ->randomName(8);
    $edit['body[' . LANGUAGE_NONE . '][0][value]'] = $this
      ->randomName(16);
    $edit['language'] = 'fr';
    $this
      ->drupalPost('node/add/page', $edit, t('Save'));
  }

}

/**
 * Functional tests for Hreflang with Comment module.
 */
class HreflangCommentTest extends DrupalWebTestCase {

  /**
   * {@inheritdoc}
   */
  public static function getInfo() {
    return array(
      'name' => 'Hreflang with comments',
      'description' => 'Tests for presence of the hreflang link element on nodes with comments.',
      'group' => 'Hreflang',
    );
  }

  /**
   * {@inheritdoc}
   */
  public function setUp() {
    parent::setUp('hreflang', 'locale', 'comment');
  }

  /**
   * Tests that superfluous page=0 parameter is not added to hreflang links.
   */
  public function testHreflangComment() {

    // User to add language.
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer languages',
      'create article content',
    ));
    $this
      ->drupalLogin($admin_user);

    // Add predefined language.
    $edit = array(
      'langcode' => 'fr',
    );
    $this
      ->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));

    // Enable language detection.
    $edit = array(
      'language[enabled][locale-url]' => 1,
    );
    $this
      ->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));

    // Create a node.
    $edit = array(
      'title' => $this
        ->randomName(8),
      'body[' . LANGUAGE_NONE . '][0][value]' => $this
        ->randomName(16),
    );
    $this
      ->drupalPost('node/add/article', $edit, t('Save'));

    // Create a comment.
    $edit = array(
      'subject' => $this
        ->randomName(8),
      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this
        ->randomName(16),
    );
    $this
      ->drupalPost(NULL, $edit, t('Save'));

    // Visit comment permalink page.
    $this
      ->clickLink(t('Permalink'));
    $this
      ->assertUrl('comment/1', array(
      'fragment' => 'comment-1',
    ));
    drupal_static_reset('language_list');
    drupal_static_reset('locale_url_outbound_alter');
    $languages = language_list();
    $this
      ->assertRaw('<link href="' . url('node/1', array(
      'absolute' => TRUE,
    )) . '" rel="alternate" hreflang="en" />');
    $this
      ->assertRaw('<link href="' . url('node/1', array(
      'absolute' => TRUE,
      'language' => $languages['fr'],
    )) . '" rel="alternate" hreflang="fr" />');
  }

}

Classes

Namesort descending Description
HreflangCommentTest Functional tests for Hreflang with Comment module.
HreflangContentTranslationTest Functional tests for Hreflang with Content translation.
HreflangTest Functional tests for Hreflang.