diff options
author | Dries Buytaert <dries@buytaert.net> | 2009-04-13 12:18:52 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2009-04-13 12:18:52 +0000 |
commit | bb253b053951049f05a6ab019bca726494e72b4c (patch) | |
tree | d4fc70132df60d19adbbb7a0131fcb24b2e6eae2 | |
parent | a85971199d192fb374c7c4ecaf9608176b6d8a9b (diff) | |
download | brdo-bb253b053951049f05a6ab019bca726494e72b4c.tar.gz brdo-bb253b053951049f05a6ab019bca726494e72b4c.tar.bz2 |
- Patch #423690 by Berdir: fixed bug in menu_link_maintain(). With tests.
-rw-r--r-- | includes/menu.inc | 7 | ||||
-rw-r--r-- | modules/simpletest/tests/menu.test | 46 | ||||
-rw-r--r-- | modules/simpletest/tests/menu_test.module | 6 |
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', |