You are here

public function LinkCheckerInterfaceTest::testLinkCheckerCreateNodeWithBrokenLinks in Link checker 7

File

./linkchecker.test, line 432
Test file for Link checker module.

Class

LinkCheckerInterfaceTest

Code

public function testLinkCheckerCreateNodeWithBrokenLinks() {

  // Enable all node type page for link extraction.
  variable_set('linkchecker_scan_node_page', TRUE);

  // Core enables the URL filter for "Full HTML" by default.
  // -> Blacklist / Disable URL filter for testing.
  variable_set('linkchecker_filter_blacklist', array(
    'filter_url' => 'filter_url',
  ));

  // Extract from all link checker supported HTML tags.
  variable_set('linkchecker_extract_from_a', 1);
  variable_set('linkchecker_extract_from_audio', 1);
  variable_set('linkchecker_extract_from_embed', 1);
  variable_set('linkchecker_extract_from_iframe', 1);
  variable_set('linkchecker_extract_from_img', 1);
  variable_set('linkchecker_extract_from_object', 1);
  variable_set('linkchecker_extract_from_video', 1);
  $url1 = 'http://example.com/node/broken/link';
  $body = 'Lorem ipsum dolor sit amet <a href="' . $url1 . '">broken link</a> sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat';

  // Save folder names in variables for reuse.
  $folder1 = $this
    ->randomName(10);
  $folder2 = $this
    ->randomName(5);

  // Fill node array.
  $langcode = LANGUAGE_NONE;
  $edit = array();
  $edit['title'] = $this
    ->randomName(32);
  $edit["body[{$langcode}][0][value]"] = $body;
  $edit['path[alias]'] = $folder1 . '/' . $folder2;
  $edit["body[{$langcode}][0][format]"] = 'full_html';

  // Extract only full qualified URLs.
  variable_set('linkchecker_check_links_types', 1);

  // Verify path input field appears on add "Basic page" form.
  $this
    ->drupalGet('node/add/page');

  // Verify path input is present.
  $this
    ->assertFieldByName('path[alias]', '', 'Path input field present on add Basic page form.');

  // Save node.
  $this
    ->drupalPost('node/add/page', $edit, t('Save'));
  $this
    ->assertText(t('@type @title has been created.', array(
    '@type' => 'Basic page',
    '@title' => $edit['title'],
  )), 'Node was created.');
  $node = $this
    ->drupalGetNodeByTitle($edit['title']);
  $this
    ->assertTrue($node, 'Node found in database.');

  // Verify if the content link is extracted properly.
  $link = $this
    ->getLinkCheckerLink($url1);
  if ($link) {
    $this
      ->assertIdentical($link->url, $url1, format_string('URL %url found.', array(
      '%url' => $url1,
    )));
  }
  else {
    $this
      ->fail(format_string('URL %url not found.', array(
      '%url' => $url1,
    )));
  }

  // Set link as failed once.
  $fail_count = 1;
  $status = '301';
  $this
    ->setLinkAsBroken($url1, $status, $fail_count);
  $this
    ->drupalGet('node/' . $node->nid . '/edit');
  $this
    ->assertRaw(format_plural($fail_count, 'Link check of <a href="@url">@url</a> failed once (status code: @code).', 'Link check of <a href="@url">@url</a> failed @count times (status code: @code).', array(
    '@url' => $url1,
    '@code' => $status,
  )), 'Link check failed once found.');

  // Set link as failed multiple times.
  $fail_count = 4;
  $status = '404';
  $this
    ->setLinkAsBroken($url1, $status, $fail_count);
  $this
    ->drupalGet('node/' . $node->nid . '/edit');
  $this
    ->assertRaw(format_plural($fail_count, 'Link check of <a href="@url">@url</a> failed once (status code: @code).', 'Link check of <a href="@url">@url</a> failed @count times (status code: @code).', array(
    '@url' => $url1,
    '@code' => $status,
  )), 'Link check failed multiple times found.');
}