danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@2
|
2
|
danielebarchiesi@2
|
3 /**
|
danielebarchiesi@2
|
4 * @file
|
danielebarchiesi@2
|
5 * Functionality tests for Menu attributes.
|
danielebarchiesi@2
|
6 *
|
danielebarchiesi@2
|
7 * @ingroup menu_attributes
|
danielebarchiesi@2
|
8 */
|
danielebarchiesi@2
|
9
|
danielebarchiesi@2
|
10 /**
|
danielebarchiesi@2
|
11 * Helper test class with some added functions for testing.
|
danielebarchiesi@2
|
12 */
|
danielebarchiesi@2
|
13 class MenuAttributesTestHelper extends DrupalWebTestCase {
|
danielebarchiesi@2
|
14 protected $admin_user;
|
danielebarchiesi@2
|
15 protected $menu_attributes_new;
|
danielebarchiesi@2
|
16 protected $menu_attributes_edit;
|
danielebarchiesi@2
|
17
|
danielebarchiesi@2
|
18 function setUp(array $modules = array()) {
|
danielebarchiesi@2
|
19 $modules[] = 'menu';
|
danielebarchiesi@2
|
20 $modules[] = 'menu_attributes';
|
danielebarchiesi@2
|
21 parent::setUp($modules);
|
danielebarchiesi@2
|
22
|
danielebarchiesi@2
|
23 // Create and login user.
|
danielebarchiesi@2
|
24 $this->admin_user = $this->drupalCreateUser(array(
|
danielebarchiesi@2
|
25 'access administration pages',
|
danielebarchiesi@2
|
26 'administer content types',
|
danielebarchiesi@2
|
27 'administer menu',
|
danielebarchiesi@2
|
28 'create page content',
|
danielebarchiesi@2
|
29 'edit any page content',
|
danielebarchiesi@2
|
30 'delete any page content',
|
danielebarchiesi@2
|
31 ));
|
danielebarchiesi@2
|
32
|
danielebarchiesi@2
|
33 $this->menu_attributes_new = array(
|
danielebarchiesi@2
|
34 'title' => $this->randomName(10),
|
danielebarchiesi@2
|
35 'id' => $this->randomName(10),
|
danielebarchiesi@2
|
36 'name' => $this->randomName(10),
|
danielebarchiesi@2
|
37 'rel' => $this->randomName(10),
|
danielebarchiesi@2
|
38 'class' => $this->randomName(10),
|
danielebarchiesi@2
|
39 'style' => $this->randomName(10),
|
danielebarchiesi@2
|
40 'target' => '_top',
|
danielebarchiesi@2
|
41 'accesskey' => $this->randomName(1),
|
danielebarchiesi@2
|
42 );
|
danielebarchiesi@2
|
43
|
danielebarchiesi@2
|
44 $this->menu_attributes_edit = array(
|
danielebarchiesi@2
|
45 'title' => $this->randomName(10),
|
danielebarchiesi@2
|
46 'id' => $this->randomName(10),
|
danielebarchiesi@2
|
47 'name' => $this->randomName(10),
|
danielebarchiesi@2
|
48 'rel' => $this->randomName(10),
|
danielebarchiesi@2
|
49 'class' => $this->randomName(10),
|
danielebarchiesi@2
|
50 'style' => $this->randomName(10),
|
danielebarchiesi@2
|
51 'target' => '_self',
|
danielebarchiesi@2
|
52 'accesskey' => $this->randomName(1),
|
danielebarchiesi@2
|
53 );
|
danielebarchiesi@2
|
54 }
|
danielebarchiesi@2
|
55
|
danielebarchiesi@2
|
56 /**
|
danielebarchiesi@2
|
57 * Add or edit a menu link using the menu module UI.
|
danielebarchiesi@2
|
58 *
|
danielebarchiesi@2
|
59 * @param integer $plid Parent menu link id.
|
danielebarchiesi@2
|
60 * @param string $link Link path.
|
danielebarchiesi@2
|
61 * @param string $menu_name Menu name.
|
danielebarchiesi@2
|
62 *
|
danielebarchiesi@2
|
63 * @return array Menu link created.
|
danielebarchiesi@2
|
64 */
|
danielebarchiesi@2
|
65 function crudMenuLink($mlid = 0, $plid = 0, $link = '<front>', $menu_name = 'navigation') {
|
danielebarchiesi@2
|
66 // View add/edit menu link page.
|
danielebarchiesi@2
|
67 if (empty($mlid)) {
|
danielebarchiesi@2
|
68 $this->drupalGet("admin/structure/menu/manage/$menu_name/add");
|
danielebarchiesi@2
|
69 $menu_attributes = $this->menu_attributes_new;
|
danielebarchiesi@2
|
70 }
|
danielebarchiesi@2
|
71 else {
|
danielebarchiesi@2
|
72 $this->drupalGet("admin/structure/menu/item/$mlid/edit");
|
danielebarchiesi@2
|
73 $menu_attributes = $this->menu_attributes_edit;
|
danielebarchiesi@2
|
74 }
|
danielebarchiesi@2
|
75 $this->assertResponse(200);
|
danielebarchiesi@2
|
76
|
danielebarchiesi@2
|
77 $title = '!link_' . $this->randomName(16);
|
danielebarchiesi@2
|
78 $edit = array(
|
danielebarchiesi@2
|
79 'link_path' => $link,
|
danielebarchiesi@2
|
80 'link_title' => $title,
|
danielebarchiesi@2
|
81 'enabled' => TRUE, // Use this to disable the menu and test.
|
danielebarchiesi@2
|
82 'expanded' => TRUE, // Setting this to true should test whether it works when we do the std_user tests.
|
danielebarchiesi@2
|
83 'parent' => $menu_name . ':' . $plid,
|
danielebarchiesi@2
|
84 'weight' => '0',
|
danielebarchiesi@2
|
85 'options[attributes][title]' => $menu_attributes['title'],
|
danielebarchiesi@2
|
86 'options[attributes][id]' => $menu_attributes['id'],
|
danielebarchiesi@2
|
87 'options[attributes][name]' => $menu_attributes['name'],
|
danielebarchiesi@2
|
88 'options[attributes][rel]' => $menu_attributes['rel'],
|
danielebarchiesi@2
|
89 'options[attributes][class]' => $menu_attributes['class'],
|
danielebarchiesi@2
|
90 'options[attributes][style]' => $menu_attributes['style'],
|
danielebarchiesi@2
|
91 'options[attributes][target]' => $menu_attributes['target'],
|
danielebarchiesi@2
|
92 'options[attributes][accesskey]' => $menu_attributes['accesskey'],
|
danielebarchiesi@2
|
93 );
|
danielebarchiesi@2
|
94
|
danielebarchiesi@2
|
95 // Add menu link.
|
danielebarchiesi@2
|
96 $this->drupalPost(NULL, $edit, t('Save'));
|
danielebarchiesi@2
|
97
|
danielebarchiesi@2
|
98 $item = db_query('SELECT * FROM {menu_links} WHERE link_title = :title', array(':title' => $title))->fetchAssoc();
|
danielebarchiesi@2
|
99
|
danielebarchiesi@2
|
100 return $item;
|
danielebarchiesi@2
|
101 }
|
danielebarchiesi@2
|
102
|
danielebarchiesi@2
|
103 function assertMenuAttributes($form_parent, $action = 'new') {
|
danielebarchiesi@2
|
104 if ($action == 'new') {
|
danielebarchiesi@2
|
105 foreach ($this->menu_attributes_new as $attribute => $value) {
|
danielebarchiesi@2
|
106 $this->assertFieldByName($form_parent . '[' . $attribute . ']', $value, t("'$attribute' attribute correct in edit form."));
|
danielebarchiesi@2
|
107 }
|
danielebarchiesi@2
|
108 }
|
danielebarchiesi@2
|
109 else {
|
danielebarchiesi@2
|
110 foreach ($this->menu_attributes_edit as $attribute => $value) {
|
danielebarchiesi@2
|
111 $this->assertFieldByName($form_parent . '[' . $attribute . ']', $value, t("New '$attribute' attribute correct in edit form."));
|
danielebarchiesi@2
|
112 }
|
danielebarchiesi@2
|
113 }
|
danielebarchiesi@2
|
114 }
|
danielebarchiesi@2
|
115 }
|
danielebarchiesi@2
|
116
|
danielebarchiesi@2
|
117 /**
|
danielebarchiesi@2
|
118 * Test basic functionality.
|
danielebarchiesi@2
|
119 */
|
danielebarchiesi@2
|
120 class MenuAttributesTestCase extends MenuAttributesTestHelper {
|
danielebarchiesi@2
|
121 public static function getInfo() {
|
danielebarchiesi@2
|
122 return array(
|
danielebarchiesi@2
|
123 'name' => 'Menu attributes',
|
danielebarchiesi@2
|
124 'description' => 'Tests menu attributes functionality.',
|
danielebarchiesi@2
|
125 'group' => 'Menu',
|
danielebarchiesi@2
|
126 );
|
danielebarchiesi@2
|
127 }
|
danielebarchiesi@2
|
128
|
danielebarchiesi@2
|
129 function setUp(array $modules = array()) {
|
danielebarchiesi@2
|
130 parent::setUp($modules);
|
danielebarchiesi@2
|
131 }
|
danielebarchiesi@2
|
132
|
danielebarchiesi@2
|
133 /**
|
danielebarchiesi@2
|
134 * Tests menu attributes functionality.
|
danielebarchiesi@2
|
135 */
|
danielebarchiesi@2
|
136 function testMenuAttributes() {
|
danielebarchiesi@2
|
137 // Login the user.
|
danielebarchiesi@2
|
138 $this->drupalLogin($this->admin_user);
|
danielebarchiesi@2
|
139
|
danielebarchiesi@2
|
140 $menu_name = 'navigation';
|
danielebarchiesi@2
|
141
|
danielebarchiesi@2
|
142 // Add a node to be used as a link for menu links.
|
danielebarchiesi@2
|
143 $node = $this->drupalCreateNode(array('type' => 'page'));
|
danielebarchiesi@2
|
144
|
danielebarchiesi@2
|
145 // Add a menu link.
|
danielebarchiesi@2
|
146 $item = $this->crudMenuLink(0, 0, 'node/' . $node->nid, $menu_name);
|
danielebarchiesi@2
|
147
|
danielebarchiesi@2
|
148 $this->drupalGet('admin/structure/menu/item/' . $item['mlid'] . '/edit');
|
danielebarchiesi@2
|
149 $this->assertMenuAttributes('options[attributes]', 'new');
|
danielebarchiesi@2
|
150
|
danielebarchiesi@2
|
151 // Edit the previously created menu link.
|
danielebarchiesi@2
|
152 $item = $this->crudMenuLink($item['mlid'], 0, 'node/' . $node->nid, $menu_name);
|
danielebarchiesi@2
|
153
|
danielebarchiesi@2
|
154 $this->drupalGet('admin/structure/menu/item/' . $item['mlid'] . '/edit');
|
danielebarchiesi@2
|
155 $this->assertMenuAttributes('options[attributes]', 'edit');
|
danielebarchiesi@2
|
156 }
|
danielebarchiesi@2
|
157 }
|
danielebarchiesi@2
|
158
|
danielebarchiesi@2
|
159 /**
|
danielebarchiesi@2
|
160 * Test menu attributes settings for nodes.
|
danielebarchiesi@2
|
161 */
|
danielebarchiesi@2
|
162 class MenuAttributesNodeTestCase extends MenuAttributesTestHelper {
|
danielebarchiesi@2
|
163 public static function getInfo() {
|
danielebarchiesi@2
|
164 return array(
|
danielebarchiesi@2
|
165 'name' => 'Menu attributes settings for nodes',
|
danielebarchiesi@2
|
166 'description' => 'Add, edit, and delete a node with menu link.',
|
danielebarchiesi@2
|
167 'group' => 'Menu',
|
danielebarchiesi@2
|
168 );
|
danielebarchiesi@2
|
169 }
|
danielebarchiesi@2
|
170
|
danielebarchiesi@2
|
171 function setUp(array $modules = array()) {
|
danielebarchiesi@2
|
172 parent::setUp($modules);
|
danielebarchiesi@2
|
173 $this->drupalLogin($this->admin_user);
|
danielebarchiesi@2
|
174 }
|
danielebarchiesi@2
|
175
|
danielebarchiesi@2
|
176 /**
|
danielebarchiesi@2
|
177 * Test creating, editing, deleting menu links via node form widget.
|
danielebarchiesi@2
|
178 */
|
danielebarchiesi@2
|
179 function testMenuNodeFormWidget() {
|
danielebarchiesi@2
|
180 // Enable Navigation menu as available menu.
|
danielebarchiesi@2
|
181 $edit = array(
|
danielebarchiesi@2
|
182 'menu_options[navigation]' => 1,
|
danielebarchiesi@2
|
183 );
|
danielebarchiesi@2
|
184 $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
|
danielebarchiesi@2
|
185 // Change default parent item to Navigation menu, so we can assert more
|
danielebarchiesi@2
|
186 // easily.
|
danielebarchiesi@2
|
187 $edit = array(
|
danielebarchiesi@2
|
188 'menu_parent' => 'navigation:0',
|
danielebarchiesi@2
|
189 );
|
danielebarchiesi@2
|
190 $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
|
danielebarchiesi@2
|
191
|
danielebarchiesi@2
|
192 // Create a node.
|
danielebarchiesi@2
|
193 $node_title = $this->randomName();
|
danielebarchiesi@2
|
194 $language = LANGUAGE_NONE;
|
danielebarchiesi@2
|
195 $edit = array(
|
danielebarchiesi@2
|
196 "title" => $node_title,
|
danielebarchiesi@2
|
197 "body[$language][0][value]" => $this->randomString(),
|
danielebarchiesi@2
|
198 );
|
danielebarchiesi@2
|
199 $this->drupalPost('node/add/page', $edit, t('Save'));
|
danielebarchiesi@2
|
200 $node = $this->drupalGetNodeByTitle($node_title);
|
danielebarchiesi@2
|
201 // Assert that there is no link for the node.
|
danielebarchiesi@2
|
202 $this->drupalGet('');
|
danielebarchiesi@2
|
203 $this->assertNoLink($node_title);
|
danielebarchiesi@2
|
204
|
danielebarchiesi@2
|
205 // Edit the node, enable the menu link setting, but skip the link title.
|
danielebarchiesi@2
|
206 $edit = array(
|
danielebarchiesi@2
|
207 'menu[enabled]' => 1,
|
danielebarchiesi@2
|
208 );
|
danielebarchiesi@2
|
209 $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@2
|
210 // Assert that there is no link for the node.
|
danielebarchiesi@2
|
211 $this->drupalGet('');
|
danielebarchiesi@2
|
212 $this->assertNoLink($node_title);
|
danielebarchiesi@2
|
213
|
danielebarchiesi@2
|
214 // Edit the node and create a menu link with attributes.
|
danielebarchiesi@2
|
215 $edit = array(
|
danielebarchiesi@2
|
216 'menu[enabled]' => 1,
|
danielebarchiesi@2
|
217 'menu[link_title]' => $node_title,
|
danielebarchiesi@2
|
218 'menu[weight]' => 17,
|
danielebarchiesi@2
|
219 'menu[options][attributes][title]' => $this->menu_attributes_new['title'],
|
danielebarchiesi@2
|
220 'menu[options][attributes][id]' => $this->menu_attributes_new['id'],
|
danielebarchiesi@2
|
221 'menu[options][attributes][name]' => $this->menu_attributes_new['name'],
|
danielebarchiesi@2
|
222 'menu[options][attributes][rel]' => $this->menu_attributes_new['rel'],
|
danielebarchiesi@2
|
223 'menu[options][attributes][class]' => $this->menu_attributes_new['class'],
|
danielebarchiesi@2
|
224 'menu[options][attributes][style]' => $this->menu_attributes_new['style'],
|
danielebarchiesi@2
|
225 'menu[options][attributes][target]' => $this->menu_attributes_new['target'],
|
danielebarchiesi@2
|
226 'menu[options][attributes][accesskey]' => $this->menu_attributes_new['accesskey'],
|
danielebarchiesi@2
|
227 );
|
danielebarchiesi@2
|
228 $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@2
|
229 // Assert that the link exists.
|
danielebarchiesi@2
|
230 $this->drupalGet('');
|
danielebarchiesi@2
|
231 $this->assertLink($node_title);
|
danielebarchiesi@2
|
232
|
danielebarchiesi@2
|
233 // Assert that the link attributes exist.
|
danielebarchiesi@2
|
234 $this->drupalGet('node/' . $node->nid . '/edit');
|
danielebarchiesi@2
|
235 $this->assertMenuAttributes('menu[options][attributes]', 'new');
|
danielebarchiesi@2
|
236
|
danielebarchiesi@2
|
237 // Edit the node again and change the menu link attributes.
|
danielebarchiesi@2
|
238 $edit = array(
|
danielebarchiesi@2
|
239 'menu[enabled]' => 1,
|
danielebarchiesi@2
|
240 'menu[link_title]' => $node_title,
|
danielebarchiesi@2
|
241 'menu[weight]' => 17,
|
danielebarchiesi@2
|
242 'menu[options][attributes][title]' => $this->menu_attributes_edit['title'],
|
danielebarchiesi@2
|
243 'menu[options][attributes][id]' => $this->menu_attributes_edit['id'],
|
danielebarchiesi@2
|
244 'menu[options][attributes][name]' => $this->menu_attributes_edit['name'],
|
danielebarchiesi@2
|
245 'menu[options][attributes][rel]' => $this->menu_attributes_edit['rel'],
|
danielebarchiesi@2
|
246 'menu[options][attributes][class]' => $this->menu_attributes_edit['class'],
|
danielebarchiesi@2
|
247 'menu[options][attributes][style]' => $this->menu_attributes_edit['style'],
|
danielebarchiesi@2
|
248 'menu[options][attributes][target]' => $this->menu_attributes_edit['target'],
|
danielebarchiesi@2
|
249 'menu[options][attributes][accesskey]' => $this->menu_attributes_edit['accesskey'],
|
danielebarchiesi@2
|
250 );
|
danielebarchiesi@2
|
251 $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@2
|
252
|
danielebarchiesi@2
|
253 // Assert that the link attributes exist.
|
danielebarchiesi@2
|
254 $this->drupalGet('node/' . $node->nid . '/edit');
|
danielebarchiesi@2
|
255 $this->assertMenuAttributes('menu[options][attributes]', 'edit');
|
danielebarchiesi@2
|
256
|
danielebarchiesi@2
|
257 // Edit the node and remove the menu link.
|
danielebarchiesi@2
|
258 $edit = array(
|
danielebarchiesi@2
|
259 'menu[enabled]' => FALSE,
|
danielebarchiesi@2
|
260 );
|
danielebarchiesi@2
|
261 $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@2
|
262 // Assert that there is no link for the node.
|
danielebarchiesi@2
|
263 $this->drupalGet('');
|
danielebarchiesi@2
|
264 $this->assertNoLink($node_title);
|
danielebarchiesi@2
|
265 }
|
danielebarchiesi@2
|
266 }
|