diff --git a/tests/workbench_moderation.test b/tests/workbench_moderation.test
index 42d1665..6d6489f 100644
--- a/tests/workbench_moderation.test
+++ b/tests/workbench_moderation.test
@@ -27,6 +27,7 @@ class WorkbenchModerationTestCase extends DrupalWebTestCase {
       'view moderation messages',
       'bypass workbench moderation',
       "create {$this->content_type} content",
+      'create url aliases',
       "edit any {$this->content_type} content",
     ));
     $this->admin_user = $this->drupalCreateUser(array(
@@ -275,6 +276,128 @@ class WorkbenchModerationUnpublishTestCase extends WorkbenchModerationTestCase {
 }
 
 /**
+ * Tests behavior when alias is set before initial publication of the node, then changed.
+ * This matters when aliases can be manually set.
+ */
+class WorkbenchPathAfterAliasChangeTestCase extends WorkbenchModerationTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Path after alias change',
+      'description' => 'Test whether the path keeps up with a changed alias *without Pathauto*',
+      'group' => 'Workbench Moderation',
+      'dependencies' => array(
+        'workbench', // Workbench is required for the mini moderation form.
+        'path', // Path is required for user-set aliases, without which this test is unnecessary.
+      ),
+    );
+  }
+
+  function setUp($modules = array()) {
+    // Make sure Workbench and Pathauto are both enabled.
+    $modules = array_merge($modules, array('workbench', 'path'));
+    parent::setUp($modules);
+    $this->drupalLogin($this->moderator_user);
+  }
+
+  /**
+   * Tests whether a node with a changed alias correctly redirects upon re-publishing.
+   **/
+  function testAliasRedirect() {
+
+    // Create a new draft node with custom alias.
+    $edit = array(
+      'title' => $this->randomName(),
+      'path[alias]' => $this->randomName(),
+    );
+    $this->drupalPost("node/add/{$this->content_type}", $edit, t('Save'));
+
+    // Refresh the node and check the alias.
+    $node = $this->drupalGetNodeByTitle($edit['title']);
+    $alias1 = $node->path['alias'];
+    debug($alias1 . ' is the old alias.');
+    $this->assertEqual($node->path['alias'], $edit['path[alias]'], 'The alias was set to ' . $node->path['alias']);
+
+    // Anonymous users with 'view content' permissions should find but not be allowed to see the unpublished node at the new alias.
+    drupal_anonymous_user('view content');
+    $this->drupalLogout();
+    $this->drupalGet($alias1);
+    $this->assertResponse(403);
+
+    // Moderator user can view the unpublished draft at the alias.
+    $this->drupalLogin($this->moderator_user);
+    $this->drupalGet($alias1);
+    $this->assertResponse(200);
+
+    // Moderate node to published.
+    $edit['workbench_moderation_state_new'] = workbench_moderation_state_published();
+    $this->drupalPost("node/{$node->nid}/edit", $edit, t('Save'));
+
+    // Anonymous can see it now
+    $this->drupalLogout();
+    $this->drupalGet($alias1);
+    $this->assertResponse(200);
+
+    // Moderator user can still see it.
+    $this->drupalLogin($this->moderator_user);
+    $this->drupalGet($alias1);
+    $this->assertResponse(200);
+
+    // Edit node and change alias.
+    $this->drupalGet($alias1);
+    $node->path['alias'] = $this->randomName();
+    $alias2 = $node->path['alias'];
+    node_save($node);
+    $node = node_load($node->nid, NULL, TRUE);
+    $this->assertEqual($node->path['alias'], $alias2, 'The alias was set to ' . $alias2);
+
+    // The old alias is gone. Anonymous and moderator users both get 404.
+    $this->drupalLogout();
+    $this->drupalGet($alias1);
+    $this->assertResponse(404);
+    $this->drupalLogin($this->moderator_user);
+    $this->drupalGet($alias1);
+    $this->assertResponse(404);
+
+    // Anonymous finds it but does not have permission to see it the new alias.
+    $this->drupalLogout();
+    $this->drupalGet($alias2);
+    $this->assertResponse(403);
+
+    // Moderator user can see it at the new alias.
+    $this->drupalLogin($this->moderator_user);
+    $this->drupalGet($alias2);
+    $this->assertResponse(200);
+
+    // Moderate node to published.
+    $edit['workbench_moderation_state_new'] = workbench_moderation_state_published();
+    $this->drupalPost("node/{$node->nid}/edit", $edit, t('Save'));
+
+    // The old alias is still gone.
+    $this->drupalLogout();
+    $this->drupalGet($alias1);
+    debug('We just got /' . $alias1 . ' as an anonymous user.');
+    $this->assertResponse(404);
+    $this->drupalLogin($this->moderator_user);
+    $this->drupalGet($alias1);
+    debug('We just got /' . $alias1 . ' as a moderator.');
+    $this->assertResponse(404);
+
+    // Anonymous can view it at the new alias now that it's published.
+    $this->drupalLogout();
+    $this->drupalGet($alias2);
+    debug('We just got /' . $alias2 . ' as an anonymous user.');
+    $this->assertResponse(200);
+
+    // Moderator user can still see it at the new alias.
+    $this->drupalLogin($this->moderator_user);
+    $this->drupalGet($alias2);
+    debug('We just got /' . $alias2 . ' as a moderator.');
+    $this->assertResponse(200);
+  }
+}
+
+/**
  * Tests behavior when title is changed after initial publication of the node.
  * this matters when aliases exist using the title as a token.
  */
