diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-10-24 05:13:44 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-10-24 05:13:44 +0000 |
commit | cd7b8f099996c46a58b354ae262852d222306e74 (patch) | |
tree | 1e7725d67472a1c203ce418f90e2fb48716efd37 /modules/simpletest/tests/path.test | |
parent | dec6514c3b2d889c3a9fb19731e49e83d554392c (diff) | |
download | brdo-cd7b8f099996c46a58b354ae262852d222306e74.tar.gz brdo-cd7b8f099996c46a58b354ae262852d222306e74.tar.bz2 |
#320331 by Dave Reid, dww, John Morahan, cwgordon7, moshe weitzman, c960657, and smoothify: Turn custom_url_rewrite_inbound() and custom_url_rewrite_outbound() into hooks.
Diffstat (limited to 'modules/simpletest/tests/path.test')
-rw-r--r-- | modules/simpletest/tests/path.test | 109 |
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))); + } +} |