Spike PHPCoverage Details: menu.test

Line #FrequencySource Line
1 <?php
2 // $Id: menu.test,v 1.8 2008/04/01 23:33:54 boombatower Exp $
3 
4 class MenuTestCase extends  DrupalTestCase {
5 
6   /**
7    * Implementation of getInfo() for information
8    */
9   function getInfo() {
10     return array(
111      'name' => t('Menu link creation/deletion'),
12       'description' => t('Create two links in the Navigation menu, check their data, and delete them using the menu module UI.'),
13       'group' => 'Menu Module Tests',
14     );
15   }
16 
17   function setUp() {
18     parent::setUp();
19 
20     $this->drupalModuleEnable('menu');
21   }
22 
23   function testCreateCheckDelete() {
24 
25     $web_user = $this->drupalCreateUser(array('access content', 'administer menu', 'access administration pages',));
26     $this->drupalLogin($web_user);
27 
28     $mlid1 = $this->uiCreateLink();
29     $mlid2 = $this->uiCreateLink($mlid1);
30 
31     $link1 = menu_link_load($mlid1);
32     $this->assertTrue((bool)$link1, '1st link created and loaded');
33 
34     $link2 = menu_link_load($mlid2);
35     $this->assertTrue((bool)$link2, '2nd link created as child and loaded');
36 
37     // Check the structure in the DB of the two links.
38     // In general, if $n = $link['depth'] then $link['p'. $n] == $link['mlid'] and $link['p'. ($n - 1)] == $link['plid'] (unless depth == 0).
39     // All $link['p'. $n] for $n > depth must be 0.
40     // We know link1 is at the top level, so $link1['deptj'] == 1 and $link1['plid'] == 0.
41     // We know that the parent of link2 is link1, so $link2['plid'] == $link1['mlid'].
42     // Both links were created in the avigation menu.
43     $this->assertTrue($link1['p2'] == 0 && $link1['p1'] == $mlid1 && $link1['plid'] == 0 && $link1['depth'] == 1 && $link1['has_children'], '1st link has correct data');
44     $this->assertTrue($link2['menu_name'] == 'navigation' && $link2['p2'] == $mlid2 && $link2['p1'] == $mlid1 && $link2['plid'] == $mlid1 && $link2['depth'] == 2 , '2nd link has correct data');
45     $this->uiDeleteLink($mlid1);
46     $this->assertFalse(menu_link_load($mlid1), '1st link deleted');
47 
48     $link2 = menu_link_load($mlid2);
49     $this->assertTrue($link2['plid'] == 0, '2nd link re-parented');
50     $this->uiDeleteLink($mlid2);
51     $this->assertFalse(menu_link_load($mlid2), '2nd link link deleted');
52   }
53   /**
54    * Delete a menu link using the menu module UI.
55    */
56   function uiDeleteLink($mlid) {
57     $this->drupalPost("admin/build/menu/item/$mlid/delete", array(), t('Confirm'));
58   }
59   /**
60    * Create a menu link using the menu module UI.
61    */
62   function uiCreateLink($plid = 0, $menu_name = 'navigation') {
63     $this->drupalGet("admin/build/menu-customize/$menu_name/add");
64     $this->assertResponse(200);
65 
66     $title = '!link_'. $this->randomName(16);
67     $edit = array (
68       'menu[link_path]' => '<front>',
69       'menu[link_title]' => $title,
70       'menu[description]' => '',
71       'menu[parent]' =>  $menu_name.':'.$plid,
72       'menu[weight]' => '0',
73     );
74 
75     $this->drupalPost("admin/build/menu-customize/$menu_name/add", $edit, t('Save'));
76     $out = $this->drupalGet("admin/build/menu-customize/$menu_name");
77     $this->assertText($title, 'Link created');
78     $mlid = db_result(db_query("SELECT mlid FROM {menu_links} WHERE link_title = '%s'", $title));
79 
80     return $mlid;
81   }
82 }
83 
84 class CustomMenuTestCase extends MenuTestCase {
85 
86   /**
87    * Implementation of getInfo() for information
88    */
89   function getInfo() {
90     return array(
911      'name' => t('Custom menu creation/deletion'),
92       'description' => t('Create a custom menu, add a link to it, and delete it using the menu module UI.'),
93       'group' => 'Menu Module Tests',
94     );
95   }
96 
97   function setUp() {
98     parent::setUp();
99 
100     $this->drupalModuleEnable('menu');
101   }
102 
103   function tearDown() {
104     parent::tearDown();
105   }
106 
107   function testCreateCheckDelete() {
108     $web_user = $this->drupalCreateUser(array('access content', 'administer menu', 'access administration pages',));
109     $this->drupalLogin($web_user);
110 
111     $this->drupalGet('admin/build/menu/add');
112     $name = substr(md5($this->randomName(16)), 0, 20);
113     $title = $this->randomName(16);
114     $edit = array (
115       'menu_name' => $name,
116       'description' => '',
117       'title' =>  $title,
118     );
119     $this->drupalPost('admin/build/menu/add', $edit, t('Save'));
120 
121     $name = 'menu-' .$name;
122     $this->drupalGet('admin/build/menu');
123     $this->assertText($title, 'Menu created');
124 
125     $mlid1 = $this->uiCreateLink(0, $name);
126     $link1 = menu_link_load($mlid1);
127     $this->assertTrue((bool)$link1, '1st link created and loaded');
128 
129     $this->drupalPost("admin/build/menu-customize/$name/delete", array(), t('Delete'));
130     $this->assertFalse(menu_load($name), 'Custom menu deleted');
131     $this->assertFalse(menu_link_load($mlid1), '1st link deleted with menu');
132   }
133 }
134 
135 
136 class MenuEnableTestCase extends DrupalTestCase {
137   /**
138    * Implementation of getInfo() for information
139    */
140   function getInfo() {
141     return array(
1421      'name' => t('Menu enable'),
143       'description' => 'Enable / disable a menu item',
144       'group' => 'Menu Module Tests',
145     );
146   }
147 
148   function setUp() {
149     parent::setUp();
150 
151     $this->drupalModuleEnable('menu');
152   }
153 
154   function tearDown() {
155     parent::tearDown();
156   }
157 
158   function testMenuModuleEnable() {
159     $web_user = $this->drupalCreateUser(array('administer menu'));
160     $this->drupalLogin($web_user);
161     $this->drupalGet('admin/build/menu-customize/navigation');
162     $this->clickLink(t('edit'), 0);
163     $url = $this->getUrl();
164     preg_match('/\d+/', $url, $matches);
165     $item = menu_link_load($matches[0]);
166     $hidden = $item['hidden'];
167     $edit['menu[enabled]'] = $hidden ? 1 : FALSE;
168     $this->assertTrue(TRUE,  $hidden ? 'Disabled item found' : 'Enabled item found');
169     $this->drupalPost('admin/build/menu/item/'. $item['mlid'] .'/edit', $edit, t('Save'));
170     $item = menu_link_load($item['mlid']);
171     $this->assertTrue($item['hidden'] != $hidden, $item['hidden'] ? 'Item is now disabled' : 'Item is now enabled');
172     $edit['menu[enabled]'] = $hidden ? FALSE : 1;
173     $this->drupalPost('admin/build/menu/item/'. $item['mlid'] .'/edit', $edit, t('Save'));
174     $item = menu_link_load($item['mlid']);
175     $this->assertTrue($item['hidden'] == $hidden, $item['hidden'] ? 'Item is disabled again' : 'Item is now enabled again');
176   }
177 }
178 
179 
180 class MenuResetTestCase extends DrupalTestCase {
181   /**
182    * Implementation of getInfo() for information
183    */
184   function getInfo() {
185     return array(
1861      'name' => t('Menu reset'),
187       'description' => 'Edit and reset a menu item',
188       'group' => 'Menu Module Tests',
189     );
190   }
191 
192   function setUp() {
193     parent::setUp();
194 
195     $this->drupalModuleEnable('menu');
196   }
197 
198   function tearDown() {
199     parent::tearDown();
200   }
201 
202   function testMenuModuleReset() {;
203     $web_user = $this->drupalCreateUser(array('administer menu'));
204     $this->drupalLogin($web_user);
205     $form_state = array();
206     $menu['menu_name'] = 'navigation';
207     require_once drupal_get_path('module', 'menu') .'/menu.admin.inc';
208     $form = drupal_retrieve_form('menu_overview_form', $form_state, $menu);
209     $found = FALSE;
210     foreach ($form as $mlid => $elements) {
211       if (isset($elements['#item']) && $elements['#item']['module'] == 'system') {
212         $found = TRUE;
213         $mlid = substr($mlid, 5);
214         break;
215       }
216     }
217     $this->assertTrue($found, 'System module item found');
218     if ($found) {
219       // We can't use menu API here because of localization issues.
220       $item = db_fetch_array(db_query('SELECT * FROM {menu_links} WHERE mlid = %d', $mlid));
221       $edit['menu[link_title]'] = $this->randomName(16);
222       $path = 'admin/build/menu/item/'. $mlid;
223       $this->drupalPost("$path/edit", $edit, t('Save'));
224       $new_title = db_result(db_query('SELECT link_title FROM {menu_links} WHERE mlid = %d', $mlid));
225       $this->assertTrue($new_title == $edit['menu[link_title]'], 'Edit succesful');
226       $this->assertFalse($item['link_title'] == $new_title, 'Item changed' );
227       $reset_path = $path .'/reset';
228       $this->assertRaw($reset_path, 'Reset link found');
229       $this->drupalPost($reset_path, array(), t('Reset'));
230       $reset_title = db_result(db_query('SELECT link_title FROM {menu_links} WHERE mlid = %d', $mlid));
231       $this->assertFalse($edit['menu[link_title]'] == $reset_title, 'Item reset');
232       $this->assertText(t('The menu item was reset to its default settings.'), 'Reset message');
233       drupal_write_record('menu_links', $item, 'mlid');
234       $restored_item = db_fetch_array(db_query('SELECT * FROM {menu_links} WHERE mlid = %d', $mlid));
235       $this->assertTrue($item == $restored_item, 'Item restored');
236     }
237   }
238 }
239 
240 
241 class MenuInvalidPathTestCase extends DrupalTestCase {
242   /**
243    * Implementation of getInfo() for information
244    */
245   function getInfo() {
246     return array(
2471      'name' => t('Menu invalid path'),
248       'description' => 'Try to create a menu item with an invalid / inaccesible path.',
249       'group' => 'Menu Module Tests',
250     );
251   }
252 
253   function setUp() {
254     parent::setUp();
255 
256     $this->drupalModuleEnable('menu');
257   }
258 
259   function tearDown() {
260     parent::tearDown();
261   }
262 
263   function testMenuModuleInvalidPath() {
264     $web_user = $this->drupalCreateUser(array('administer menu'));
265     $this->drupalLogin($web_user);
266     foreach (array('-&-', 'admin/user/permissions') as $invalid_path) {
267       $edit = array (
268         'menu[link_path]' => $invalid_path,
269         'menu[link_title]' => 'title',
270       );
271       $this->drupalPost('admin/build/menu-customize/navigation/add', $edit, t('Save'));
272       $this->assertRaw(t("The path '@path' is either invalid or you do not have access to it.", array('@path' => $invalid_path)), 'Invalid path failed');
273     }
274   }
275 }