summaryrefslogtreecommitdiff
path: root/kolab.org/www/drupal-7.18/sites/all/modules/linkchecker/linkchecker.test
diff options
context:
space:
mode:
Diffstat (limited to 'kolab.org/www/drupal-7.18/sites/all/modules/linkchecker/linkchecker.test')
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/linkchecker/linkchecker.test282
1 files changed, 271 insertions, 11 deletions
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/linkchecker/linkchecker.test b/kolab.org/www/drupal-7.18/sites/all/modules/linkchecker/linkchecker.test
index d4ea142..81ecaff 100644
--- a/kolab.org/www/drupal-7.18/sites/all/modules/linkchecker/linkchecker.test
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/linkchecker/linkchecker.test
@@ -4,11 +4,12 @@
* @file
* Test file for Link checker module.
*/
+
class LinkCheckerLinkExtractionTest extends DrupalWebTestCase {
public static function getInfo() {
return array(
- 'name' => t('Link extraction tests'),
+ 'name' => t('Link checker link extraction tests'),
'description' => t('Test Link checker module link extraction functionality.'),
'group' => 'Link checker',
);
@@ -182,11 +183,12 @@ EOT;
$folder2 = $this->randomName(5);
// Fill node array.
+ $langcode = LANGUAGE_NONE;
$edit = array();
$edit['title'] = $this->randomName(32);
- $edit['body[und][0][value]'] = $body;
+ $edit["body[$langcode][0][value]"] = $body;
$edit['path[alias]'] = $folder1 . '/' . $folder2;
- $edit['body[und][0][format]'] = 'full_html';
+ $edit["body[$langcode][0][format]"] = 'full_html';
// Extract only full qualified URLs.
variable_set('linkchecker_check_links_types', 1);
@@ -198,12 +200,9 @@ EOT;
// 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'])), t('Node was created.'));
- // @todo fix this test
- // $this->assertText(t('@type %title has been created.', array('@type' => 'Basic page', '%title' => $edit['title'])), t('Node was created.'));
- $this->assertText(t('has been created.'), t('Node was created.'));
-
- // Verify if the content links are extracted correctly.
+ // Verify if the content links are extracted properly.
$urls_fqdn = array(
'http://www.lagrandeepicerie.fr/#e-boutique/Les_produits_du_moment,2/coffret_vins_doux_naturels,149',
'http://wetterservice.msn.de/phclip.swf?zip=60329&ort=Frankfurt',
@@ -259,7 +258,7 @@ EOT;
// @todo Path alias seems not saved!???
// $this->assertIdentical($node->path, $edit['path'], t('URL alias "@node-path" matches path "@edit-path".', array('@node-path' => $node->path, '@edit-path' => $edit['path'])));
- // Verify if the content links are extracted correctly.
+ // Verify if the content links are extracted properly.
global $base_root, $base_path;
$urls_relative = array(
'../foo1/test.png' => $base_root . $base_path . 'foo1/test.png',
@@ -302,7 +301,6 @@ EOT;
$urls_expected_count = count($urls_fqdn + $urls_relative);
$this->assertEqual($urls_in_database, $urls_expected_count, t('Found @urls_in_database URLs in database matches expected result of @urls_expected_count.', array('@urls_in_database' => $urls_in_database, '@urls_expected_count' => $urls_expected_count)));
-
// Verify if link check has been enabled for normal URLs.
$urls = array(
'http://www.lagrandeepicerie.fr/#e-boutique/Les_produits_du_moment,2/coffret_vins_doux_naturels,149',
@@ -335,7 +333,6 @@ EOT;
$this->assertTrue($this->getLinkcheckerLink($url)->status, t('Link check for %url is enabled.', array('%url' => $url)));
}
-
// Verify if link check has been disabled for example.com/net/org URLs.
$documentation_urls = array(
'http://example.net/video/foo1.mov',
@@ -380,3 +377,266 @@ EOT;
return db_query('SELECT COUNT(1) FROM {linkchecker_link}')->fetchField();
}
}
+
+
+class LinkCheckerInterfaceTest extends DrupalWebTestCase {
+
+ public static function getInfo() {
+ return array(
+ 'name' => t('Link checker interface tests'),
+ 'description' => t('Test the interface functionality.'),
+ 'group' => 'Link checker',
+ );
+ }
+
+ public function setUp() {
+ parent::setUp('block', 'linkchecker', 'path');
+ // @todo: Add comment interface test.
+ // parent::setUp('block', 'comment', 'linkchecker', 'path');
+
+ $full_html_format = filter_format_load('full_html');
+ $permissions = array(
+ // Block permissions.
+ 'administer blocks',
+ // Comment permissions.
+ 'administer comments',
+ 'access comments',
+ 'post comments',
+ 'skip comment approval',
+ 'edit own comments',
+ // Node permissions.
+ 'create page content',
+ 'edit own page content',
+ // Path aliase permissions.
+ 'administer url aliases',
+ 'create url aliases',
+ // Content filter permissions.
+ filter_permission_name($full_html_format),
+ );
+
+ $user = $this->drupalCreateUser($permissions);
+ $this->drupalLogin($user);
+
+ }
+
+ public function testLinkCheckerCreateNodeWithBrokenLinks() {
+ // Enable all node type page for link extraction.
+ variable_set('linkchecker_scan_nodetypes', array('page'));
+
+ // 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]', '', t('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'])), t('Node was created.'));
+
+ $node = $this->drupalGetNodeByTitle($edit['title']);
+ $this->assertTrue($node, t('Node found in database.'));
+
+ // Verify if the content link is extracted properly.
+ $link = $this->getLinkCheckerLink($url1);
+ if ($link) {
+ $this->assertIdentical($link->url, $url1, t('URL %url found.', array('%url' => $url1)));
+ }
+ else {
+ $this->fail(t('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)), t('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)), t('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'), t('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 <a href="' . $url1 . '">broken link</a> 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.'), t('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, t('Custom block found in database'));
+
+ // Verify if the content link is extracted properly.
+ $link = $this->getLinkCheckerLink($url1);
+ if ($link) {
+ $this->assertIdentical($link->url, $url1, t('URL %url found.', array('%url' => $url1)));
+ }
+ else {
+ $this->fail(t('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(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)), t('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(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)), t('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();
+ }
+}
+
+/**
+ * Test case for impersonating users.
+ *
+ * Based on http://drupal.org/node/287292#comment-3162350
+ */
+class LinkCheckerImpersonatingUserTestCase extends DrupalWebTestCase {
+
+ public static function getInfo() {
+ return array(
+ 'name' => 'Link checker impersonate users',
+ 'description' => 'Temporarily impersonate another user, and then restore the original user.',
+ 'group' => 'Link checker',
+ );
+ }
+
+ function setUp() {
+ parent::setUp('linkchecker');
+ }
+
+ function testLinkCheckerImpersonateUser() {
+ global $user;
+ $original_user = $user;
+
+ // If not currently logged in, use linkchecker_impersonate_user() to switch to
+ // user 1. If logged in, switch to the anonymous user instead.
+ if (user_is_anonymous()) {
+ linkchecker_impersonate_user(1);
+ }
+ else {
+ linkchecker_impersonate_user(0);
+ }
+
+ // Verify that the active user has changed, and that session saving is
+ // disabled.
+ $this->assertEqual($user->uid, ($original_user->uid == 0 ? 1 : 0), t('User switched'));
+ $this->assertFalse(drupal_save_session(), t('Session saving is disabled.'));
+
+ // Perform a second (nested) impersonation.
+ linkchecker_impersonate_user(1);
+ $this->assertEqual($user->uid, 1, t('User switched.'));
+
+ // Revert to the user which was active between the first and second
+ // impersonation attempt.
+ linkchecker_revert_user();
+
+ // Since we are still impersonating the user from the first attempt,
+ // session handling still needs to be disabled.
+ $this->assertEqual($user->uid, ($original_user->uid == 0 ? 1 : 0), t('User switched.'));
+ $this->assertFalse(drupal_save_session(), t('Session saving is disabled.'));
+
+ // Revert to the original user which was active before the first
+ // impersonation attempt.
+ linkchecker_revert_user();
+
+ // Assert that the original user is the active user again, and that session
+ // saving has been re-enabled.
+ $this->assertEqual($user->uid, $original_user->uid, t('Original user successfully restored.'));
+
+ // Simpletest uses linkchecker_impersonate_user() too, revert the impersonation by
+ // Simpletest to enable session saving again. This is safe because calling
+ // linkchecker_revert_user() too often simply results in returning the active user.
+ linkchecker_revert_user();
+ $this->assertTrue(drupal_save_session(), t('Session saving is enabled.'));
+ }
+}