summaryrefslogtreecommitdiff
path: root/modules/simpletest/tests/path.test
diff options
context:
space:
mode:
Diffstat (limited to 'modules/simpletest/tests/path.test')
-rw-r--r--modules/simpletest/tests/path.test109
1 files changed, 109 insertions, 0 deletions
diff --git a/modules/simpletest/tests/path.test b/modules/simpletest/tests/path.test
index f76ea4089..519be543d 100644
--- a/modules/simpletest/tests/path.test
+++ b/modules/simpletest/tests/path.test
@@ -126,3 +126,112 @@ class DrupalMatchPathTestCase extends DrupalWebTestCase {
);
}
}
+
+/**
+ * Tests hook_url_alter functions.
+ */
+class UrlAlterFunctionalTest extends DrupalWebTestCase {
+ public static function getInfo() {
+ return array(
+ 'name' => t('URL altering'),
+ 'description' => t('Tests hook_url_inbound_alter() and hook_url_outbound_alter().'),
+ 'group' => t('Path API'),
+ );
+ }
+
+ function setUp() {
+ parent::setUp('path', 'forum', 'url_alter_test');
+ }
+
+ /**
+ * Test that URL altering works and that it occurs in the correct order.
+ */
+ function testUrlAlter() {
+ $account = $this->drupalCreateUser(array('administer url aliases'));
+ $this->drupalLogin($account);
+
+ $uid = $account->uid;
+ $name = $account->name;
+
+ // Test a single altered path.
+ $this->assertUrlInboundAlter("user/$name", "user/$uid");
+ $this->assertUrlOutboundAlter("user/$uid", "user/$name");
+
+ // Test that a path always uses its alias.
+ $path = array('source' => "user/$uid/test1", 'alias' => 'alias/test1');
+ path_save($path);
+ $this->assertUrlInboundAlter('alias/test1', "user/$uid/test1");
+ $this->assertUrlOutboundAlter("user/$uid/test1", 'alias/test1');
+
+ // Test that alias source paths are normalized in the interface.
+ $edit = array('source' => "user/$name/edit", 'alias' => 'alias/test2');
+ $this->drupalPost('admin/config/search/path/add', $edit, t('Create new alias'));
+ $this->assertText(t('The alias has been saved.'));
+
+ // Test that a path always uses its alias.
+ $this->assertUrlInboundAlter('alias/test2', "user/$uid/edit");
+ $this->assertUrlOutboundAlter("user/$uid/edit", 'alias/test2');
+
+ // Test a non-existant user is not altered.
+ $uid++;
+ $this->assertUrlInboundAlter("user/$uid", "user/$uid");
+ $this->assertUrlOutboundAlter("user/$uid", "user/$uid");
+
+ // Test that 'forum' is altered to 'community' correctly.
+ $this->assertUrlInboundAlter('community', 'forum');
+ $this->assertUrlOutboundAlter('forum', 'community');
+
+ // Add a forum to test url altering.
+ $forum_vid = db_query("SELECT vid FROM {taxonomy_vocabulary} WHERE module = 'forum'")->fetchField();
+ $tid = db_insert('taxonomy_term_data')
+ ->fields(array(
+ 'name' => $this->randomName(),
+ 'vid' => $forum_vid,
+ ))
+ ->execute();
+
+ // Test that a existing forum URL is altered.
+ $this->assertUrlInboundAlter("community/$tid", "forum/$tid");
+ $this->assertUrlOutboundAlter("taxonomy/term/$tid", "community/$tid");
+
+ // Test that a non-existant forum URL is not altered.
+ $tid++;
+ $this->assertUrlInboundAlter("taxonomy/term/$tid", "taxonomy/term/$tid");
+ $this->assertUrlOutboundAlter("taxonomy/term/$tid", "taxonomy/term/$tid");
+ }
+
+ /**
+ * Assert that an outbound path is altered to an expected value.
+ *
+ * @param $original
+ * A string with the original path that is run through url().
+ * @param $final
+ * A string with the expected result after url().
+ * @return
+ * TRUE if $original was correctly altered to $final, FALSE otherwise.
+ */
+ protected function assertUrlOutboundAlter($original, $final) {
+ // Test outbound altering.
+ $result = url($original);
+ $base_path = base_path() . (variable_get('clean_url', '0') ? '' : '?q=');
+ $result = substr($result, strlen($base_path));
+ $this->assertIdentical($result, $final, t('Altered outbound URL %original, expected %final, and got %result.', array('%original' => $original, '%final' => $final, '%result' => $result)));
+ }
+
+ /**
+ * Assert that a inbound path is altered to an expected value.
+ *
+ * @param $original
+ * A string with the aliased or un-normal path that is run through
+ * drupal_get_normal_path().
+ * @param $final
+ * A string with the expected result after url().
+ * @return
+ * TRUE if $original was correctly altered to $final, FALSE otherwise.
+ */
+ protected function assertUrlInboundAlter($original, $final) {
+ // Test inbound altering.
+ $result = drupal_get_normal_path($original);
+ $this->assertIdentical($result, $final, t('Altered inbound URL %original, expected %final, and got %result.', array('%original' => $original, '%final' => $final, '%result' => $result)));
+ }
+}