summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-04-13 12:18:52 +0000
committerDries Buytaert <dries@buytaert.net>2009-04-13 12:18:52 +0000
commitbb253b053951049f05a6ab019bca726494e72b4c (patch)
treed4fc70132df60d19adbbb7a0131fcb24b2e6eae2
parenta85971199d192fb374c7c4ecaf9608176b6d8a9b (diff)
downloadbrdo-bb253b053951049f05a6ab019bca726494e72b4c.tar.gz
brdo-bb253b053951049f05a6ab019bca726494e72b4c.tar.bz2
- Patch #423690 by Berdir: fixed bug in menu_link_maintain(). With tests.
-rw-r--r--includes/menu.inc7
-rw-r--r--modules/simpletest/tests/menu.test46
-rw-r--r--modules/simpletest/tests/menu_test.module6
3 files changed, 56 insertions, 3 deletions
diff --git a/includes/menu.inc b/includes/menu.inc
index bb804fd74..b9d0fba5a 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -2349,9 +2349,10 @@ function menu_link_maintain($module, $op, $link_path, $link_title) {
->condition('link_path', $link_path)
->condition('customized', 0)
->condition('module', $module)
- ->execute();
- foreach ($result as $item) {
- menu_cache_clear($item['menu_name']);
+ ->groupBy('menu_name')
+ ->execute()->fetchCol();
+ foreach ($result as $menu_name) {
+ menu_cache_clear($menu_name);
}
break;
case 'delete':
diff --git a/modules/simpletest/tests/menu.test b/modules/simpletest/tests/menu.test
index 882b3831f..68257b3b1 100644
--- a/modules/simpletest/tests/menu.test
+++ b/modules/simpletest/tests/menu.test
@@ -30,6 +30,52 @@ class MenuIncTestCase extends DrupalWebTestCase {
}
/**
+ * Tests for menu_link_maintain().
+ */
+ function testMenuLinkMaintain() {
+ $admin_user = $this->drupalCreateUser(array('administer site configuration'));
+ $this->drupalLogin($admin_user);
+
+ // Create three menu items.
+ menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/1', 'Menu link #1');
+ menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/1', 'Menu link #1-1');
+ menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/2', 'Menu link #2');
+
+ // Move second link to the main-menu, to test caching later on.
+ db_update('menu_links')
+ ->fields(array('menu_name' => 'main-menu'))
+ ->condition('link_title', 'Menu link #1-1')
+ ->condition('customized', 0)
+ ->condition('module', 'menu_test')
+ ->execute();
+ menu_cache_clear('main-menu');
+
+ // Load front page.
+ $this->drupalGet('node');
+ $this->assertLink(t('Menu link #1'), 0, 'Found menu link #1');
+ $this->assertLink(t('Menu link #1-1'), 0, 'Found menu link #1-1');
+ $this->assertLink(t('Menu link #2'), 0, 'Found menu link #2');
+
+ // Rename all links for the given path.
+ menu_link_maintain('menu_test', 'update', 'menu_test_maintain/1', 'Menu link updated');
+ // Load a different page to be sure that we have up to date information.
+ $this->drupalGet('menu_test_maintain/1');
+ $this->assertLink(t('Menu link updated'), 0, t('Found updated menu link'));
+ $this->assertNoLink(t('Menu link #1'), 0, t('Not found menu link #1'));
+ $this->assertNoLink(t('Menu link #1'), 0, t('Not found menu link #1-1'));
+ $this->assertLink(t('Menu link #2'), 0, t('Found menu link #2'));
+
+ // Delete all links for the given path.
+ menu_link_maintain('menu_test', 'delete', 'menu_test_maintain/1', '');
+ // Load a different page to be sure that we have up to date information.
+ $this->drupalGet('menu_test_maintain/2');
+ $this->assertNoLink(t('Menu link updated'), 0, t('Not found deleted menu link'));
+ $this->assertNoLink(t('Menu link #1'), 0, t('Not found menu link #1'));
+ $this->assertNoLink(t('Menu link #1'), 0, t('Not found menu link #1-1'));
+ $this->assertLink(t('Menu link #2'), 0, t('Found menu link #2'));
+ }
+
+ /**
* Tests for menu_name parameter for hook_menu().
*/
function testMenuName() {
diff --git a/modules/simpletest/tests/menu_test.module b/modules/simpletest/tests/menu_test.module
index 7bb5af5e5..1b8daa4e8 100644
--- a/modules/simpletest/tests/menu_test.module
+++ b/modules/simpletest/tests/menu_test.module
@@ -25,6 +25,12 @@ function menu_test_menu() {
'access arguments' => array('access content'),
);
+ // Hidden link for menu_link_maintain tests
+ $items['menu_test_maintain/%'] = array(
+ 'title' => 'Menu maintain test',
+ 'page callback' => 'node_page_default',
+ 'access arguments' => array('access content'),
+ );
// Hierarchical tests.
$items['menu-test/hierarchy/parent'] = array(
'title' => 'Parent menu router',