admin_user = $this->drupalCreateUser($permissions);
$this->drupalLogin($this->admin_user);
}
/**
* Test the interface functionality.
*/
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 broken link 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(\Drupal::translation()->formatPlural($fail_count, 'Link check of @url failed once (status code: @code).', 'Link check of @url 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(\Drupal::translation()->formatPlural($fail_count, 'Link check of @url failed once (status code: @code).', 'Link check of @url failed @count times (status code: @code).', array('@url' => $url1, '@code' => $status)), 'Link check failed multiple times found.');
}
public function testLinkCheckerCreateBlockWithBrokenLinks() {
// Enable all blocks for link extraction.
variable_set('linkchecker_scan_blocks', 1);
// Confirm that the add block link appears on block overview pages.
$this->drupalGet('admin/structure/block');
$this->assertRaw(l(t('Add block'), 'admin/structure/block/add'), 'Add block link is present on block overview page for default theme.');
$url1 = 'http://example.com/block/broken/link';
$body = 'Lorem ipsum dolor sit amet broken link sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat';
// Add a new custom block by filling out the input form on the admin/structure/block/add page.
$custom_block = array();
$custom_block['info'] = $this->randomName(8);
$custom_block['title'] = $this->randomName(8);
$custom_block['body[value]'] = $body;
$custom_block['body[format]'] = 'full_html';
$this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
// Confirm that the custom block has been created, and then query the created bid.
$this->assertText(t('The block has been created.'), 'Custom block successfully created.');
$bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField();
// Check to see if the custom block was created by checking that it's in the database.
$this->assertNotNull($bid, 'Custom block 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('admin/structure/block/manage/block/' . $bid . '/configure');
$this->assertRaw(\Drupal::translation()->formatPlural($fail_count, 'Link check of @url failed once (status code: @code).', 'Link check of @url 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('admin/structure/block/manage/block/' . $bid . '/configure');
$this->assertRaw(\Drupal::translation()->formatPlural($fail_count, 'Link check of @url failed once (status code: @code).', 'Link check of @url failed @count times (status code: @code).', array('@url' => $url1, '@code' => $status)), 'Link check failed multiple times found.');
}
/**
* Set an URL as broken.
*
* @param string $url
* URL of the link to find.
* @param string $status
* A fake HTTP code for testing.
*/
function setLinkAsBroken($url = NULL, $status = '404', $fail_count = 0) {
db_update('linkchecker_link')
->condition('urlhash', drupal_hash_base64($url))
->fields(array(
'code' => $status,
'error' => 'Not available (test running)',
'fail_count' => $fail_count,
'last_checked' => time(),
'status' => 1,
))
->execute();
}
/**
* Get linkchecker link by url.
*
* @param string $url
* URL of the link to find.
*
* @return object
* The link object.
*/
function getLinkCheckerLink($url) {
return db_query('SELECT * FROM {linkchecker_link} WHERE urlhash = :urlhash', array(':urlhash' => drupal_hash_base64($url)))->fetchObject();
}
}