comparison openmindattribute/tests/link.attribute.test @ 0:124ef8f3b22d

initial
author Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
date Fri, 27 Mar 2015 19:21:42 +0100
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:124ef8f3b22d
1 <?php
2
3 /**
4 * @file
5 * Basic simpletests to test options on link module.
6 */
7
8 class LinkAttributeCrudTest extends DrupalWebTestCase {
9 private $zebra;
10
11 protected $permissions = array(
12 'access content',
13 'administer content types',
14 'administer nodes',
15 'administer filters',
16 'access comments',
17 'post comments',
18 'skip comment approval',
19 'access administration pages',
20 );
21
22 public static function getInfo() {
23 return array(
24 'name' => 'Link Attribute Tests',
25 'description' => 'Tests the field attributes, making sure they appear in various displayed situations.',
26 'group' => 'Link',
27 );
28 }
29
30 function setup() {
31 parent::setup('field_ui', 'link');
32 $this->zebra = 0;
33 // Create and login user.
34 $this->web_user = $this->drupalCreateUser(array('administer content types'));
35 $this->drupalLogin($this->web_user);
36 }
37
38 protected function createLink($url, $title, $attributes = array()) {
39 return array(
40 'url' => $url,
41 'title' => $title,
42 'attributes' => $attributes,
43 );
44 }
45
46 protected function assertLinkOnNode($field_name, $link_value, $message = '', $group = 'Other') {
47 $this->zebra++;
48 $zebra_string = ($this->zebra % 2 == 0) ? 'even' : 'odd';
49 $cssFieldLocator = 'field-'. str_replace('_', '-', $field_name);
50 $this->assertPattern('@<div class="field field-type-link '. $cssFieldLocator .'".*<div class="field-item '. $zebra_string .'">\s*'. $link_value .'\s*</div>@is',
51 $message,
52 $group);
53 }
54
55 /**
56 * A simple test that just creates a new node type, adds a link field to it, creates a new node of that type, and makes sure
57 * that the node is being displayed.
58 */
59 function testBasic() {
60 $content_type_friendly = $this->randomName(20);
61 $content_type_machine = strtolower($this->randomName(10));
62 $title = $this->randomName(20);
63
64 $this->drupalGet('admin/structure/types');
65
66 // Create the content type.
67 $this->clickLink(t('Add content type'));
68
69 $edit = array (
70 'name' => $content_type_friendly,
71 'type' => $content_type_machine,
72 );
73 $this->drupalPost(NULL, $edit, t('Save and add fields'));
74 $this->assertText(t('The content type @name has been added.', array('@name' => $content_type_friendly)));
75
76 // Now add a singleton field.
77 $single_field_name_friendly = $this->randomName(20);
78 $single_field_name_machine = strtolower($this->randomName(10));
79 $single_field_name = 'field_'. $single_field_name_machine;
80 $edit = array (
81 'fields[_add_new_field][label]' => $single_field_name_friendly,
82 'fields[_add_new_field][field_name]' => $single_field_name_machine,
83 'fields[_add_new_field][type]' => 'link_field',
84 'fields[_add_new_field][widget_type]' => 'link_field',
85
86 );
87 $this->drupalPost(NULL, $edit, t('Save'));
88
89 // We'll go with the default settings for this run-through.
90 $this->drupalPost(NULL, array(), t('Save field settings'));
91
92 // Using all the default settings, so press the button.
93 $this->drupalPost(NULL, array(), t('Save settings'));
94 $this->assertText(t('Saved @name configuration.', array('@name' => $single_field_name_friendly)));
95
96 // Somehow clicking "save" isn't enough, and we have to do a
97 // node_types_rebuild().
98 node_types_rebuild();
99 menu_rebuild();
100 $type_exists = db_query('SELECT 1 FROM {node_type} WHERE type = :type', array(':type' => $content_type_machine))->fetchField();
101 $this->assertTrue($type_exists, 'The new content type has been created in the database.');
102
103 $permission = 'create ' . $content_type_machine . ' content';
104 $permission_edit = 'edit ' . $content_type_machine . ' content';
105 // Reset the permissions cache.
106 $this->checkPermissions(array($permission), TRUE);
107
108 // Now that we have a new content type, create a user that has privileges
109 // on the content type.
110 $permissions = array_merge($this->permissions, array($permission));
111 $this->web_user = $this->drupalCreateUser($permissions);
112 $this->drupalLogin($this->web_user);
113
114 // Go to page.
115 $this->drupalGet('node/add/'. $content_type_machine);
116
117 // Add a node.
118 $edit = array(
119 'title' => $title,
120 'field_'. $single_field_name_machine. '[und][0][title]' => 'Link',
121 'field_'. $single_field_name_machine. '[und][0][url]' => 'http://www.drupal.org/',
122 );
123
124 $this->drupalPost(NULL, $edit, t('Save'));
125 $this->assertText(t('@content_type_friendly @title has been created', array('@content_type_friendly' => $content_type_friendly, '@title' => $title)));
126
127 $this->drupalGet('node/add/'. $content_type_machine);
128
129 // Create a node:
130 $edit = array(
131 'title' => $title,
132 'field_' . $single_field_name_machine . '[und][0][url]' => 'http://www.example.com/',
133 'field_' . $single_field_name_machine . '[und][0][title]' => 'Display',
134 );
135
136 // Now we can fill in the second item in the multivalue field and save.
137 $this->drupalPost(NULL, $edit, t('Save'));
138 $this->assertText(t('@content_type_friendly @title has been created', array('@content_type_friendly' => $content_type_friendly, '@title' => $title)));
139
140 $this->assertText('Display');
141 $this->assertLinkByHref('http://www.example.com');
142 }
143
144 protected function createSimpleLinkField($single_field_name_machine, $single_field_name_friendly, $content_type_machine) {
145 $this->drupalGet('admin/structure/types/manage/' . $content_type_machine . '/fields');
146 $edit = array (
147 'fields[_add_new_field][label]' => $single_field_name_friendly,
148 'fields[_add_new_field][field_name]' => $single_field_name_machine,
149 'fields[_add_new_field][type]' => 'link_field',
150 'fields[_add_new_field][widget_type]' => 'link_field',
151 );
152 $this->drupalPost(NULL, $edit, t('Save'));
153
154 // We'll go with the default settings for this run-through.
155 $this->drupalPost(NULL, array(), t('Save field settings'));
156
157 // Using all the default settings, so press the button.
158 $this->drupalPost(NULL, array(), t('Save settings'));
159 $this->assertText(t('Saved @name configuration.', array('@name' => $single_field_name_friendly)));
160
161 // Somehow clicking "save" isn't enough, and we have to do a
162 // node_types_rebuild().
163 node_types_rebuild();
164 menu_rebuild();
165 $type_exists = db_query('SELECT 1 FROM {node_type} WHERE type = :type', array(':type' => $content_type_machine))->fetchField();
166 $this->assertTrue($type_exists, 'The new content type has been created in the database.');
167 }
168
169 protected function createNodeTypeUser($content_type_machine) {
170 $permission = 'create ' . $content_type_machine . ' content';
171 $permission_edit = 'edit ' . $content_type_machine . ' content';
172 // Reset the permissions cache.
173 $this->checkPermissions(array($permission), TRUE);
174
175 // Now that we have a new content type, create a user that has privileges
176 // on the content type.
177 $permissions = array_merge($this->permissions, array($permission));
178 $this->web_user = $this->drupalCreateUser($permissions);
179 $this->drupalLogin($this->web_user);
180 }
181
182 protected function createNodeForTesting($content_type_machine, $content_type_friendly, $single_field_name_machine, $title, $url, $node_title = '') {
183 $this->drupalGet('node/add/'. $content_type_machine);
184
185 if (!$node_title) {
186 $node_title = $this->randomName(20);
187 }
188 $edit = array(
189 'title' => $node_title,
190 );
191 if ($url) {
192 $edit['field_' . $single_field_name_machine . '[und][0][url]'] = $url;
193 }
194 if ($title) {
195 $edit['field_' . $single_field_name_machine . '[und][0][title]'] = $title;
196 }
197
198 $this->drupalPost(NULL, $edit, t('Save'));
199 $this->assertText(t('@content_type_friendly @title has been created', array('@content_type_friendly' => $content_type_friendly, '@title' => $node_title)));
200
201 }
202
203 /**
204 * Test the link_plain formatter and it's output.
205 */
206 function testFormatterPlain() {
207 $content_type_friendly = $this->randomName(20);
208 $content_type_machine = strtolower($this->randomName(10));
209
210 $this->drupalCreateContentType(array(
211 'type' => $content_type_machine,
212 'name' => $content_type_friendly,
213 ));
214
215 // Now add a singleton field.
216 $single_field_name_friendly = $this->randomName(20);
217 $single_field_name_machine = strtolower($this->randomName(10));
218 //$single_field_name = 'field_'. $single_field_name_machine;
219 $this->createSimpleLinkField($single_field_name_machine, $single_field_name_friendly, $content_type_machine);
220
221 // Okay, now we want to make sure this display is changed:
222 $this->drupalGet('admin/structure/types/manage/'. $content_type_machine .'/display');
223 $edit = array(
224 'fields[field_'. $single_field_name_machine .'][label]' => 'above',
225 'fields[field_'. $single_field_name_machine .'][type]' => 'link_plain',
226 );
227 $this->drupalPost(NULL, $edit, t('Save'));
228
229 $this->createNodeTypeUser($content_type_machine);
230
231 $link_tests = array(
232 'plain' => array(
233 'text' => 'Display',
234 'url' => 'http://www.example.com/',
235 ),
236 'query' => array(
237 'text' => 'Display',
238 'url' => 'http://www.example.com/?q=test',
239 ),
240 'fragment' => array(
241 'text' => 'Display',
242 'url' => 'http://www.example.com/#test',
243 ),
244 );
245
246 foreach ($link_tests as $key => $link_test) {
247 $link_text = $link_test['text'];
248 $link_url = $link_test['url'];
249 $this->createNodeForTesting($content_type_machine, $content_type_friendly, $single_field_name_machine, $link_text, $link_url);
250
251 $this->assertText($link_url);
252 $this->assertNoText($link_text);
253 $this->assertNoLinkByHref($link_url);
254 }
255 }
256
257 function testFormatterURL() {
258 $content_type_friendly = $this->randomName(20);
259 $content_type_machine = strtolower($this->randomName(10));
260
261 $this->drupalCreateContentType(array(
262 'type' => $content_type_machine,
263 'name' => $content_type_friendly,
264 ));
265
266 // Now add a singleton field.
267 $single_field_name_friendly = $this->randomName(20);
268 $single_field_name_machine = strtolower($this->randomName(10));
269 //$single_field_name = 'field_'. $single_field_name_machine;
270 $this->createSimpleLinkField($single_field_name_machine, $single_field_name_friendly, $content_type_machine);
271
272 // Okay, now we want to make sure this display is changed:
273 $this->drupalGet('admin/structure/types/manage/'. $content_type_machine .'/display');
274 $edit = array(
275 'fields[field_'. $single_field_name_machine .'][label]' => 'above',
276 'fields[field_'. $single_field_name_machine .'][type]' => 'link_url',
277 );
278 $this->drupalPost(NULL, $edit, t('Save'));
279
280 $this->createNodeTypeUser($content_type_machine);
281
282 $link_tests = array(
283 'plain' => array(
284 'text' => 'Display',
285 'url' => 'http://www.example.com/',
286 ),
287 'query' => array(
288 'text' => 'Display',
289 'url' => 'http://www.example.com/?q=test',
290 ),
291 'fragment' => array(
292 'text' => 'Display',
293 'url' => 'http://www.example.com/#test',
294 ),
295 );
296
297 foreach ($link_tests as $key => $link_test) {
298 $link_text = $link_test['text'];
299 $link_url = $link_test['url'];
300 $this->createNodeForTesting($content_type_machine, $content_type_friendly, $single_field_name_machine, $link_text, $link_url);
301
302 $this->assertNoText($link_text);
303 $this->assertLinkByHref($link_url);
304 }
305 }
306
307 function testFormatterShort() {
308 $content_type_friendly = $this->randomName(20);
309 $content_type_machine = strtolower($this->randomName(10));
310
311 $this->drupalCreateContentType(array(
312 'type' => $content_type_machine,
313 'name' => $content_type_friendly,
314 ));
315
316 // Now add a singleton field.
317 $single_field_name_friendly = $this->randomName(20);
318 $single_field_name_machine = strtolower($this->randomName(10));
319 //$single_field_name = 'field_'. $single_field_name_machine;
320 $this->createSimpleLinkField($single_field_name_machine, $single_field_name_friendly, $content_type_machine);
321
322 // Okay, now we want to make sure this display is changed:
323 $this->drupalGet('admin/structure/types/manage/'. $content_type_machine .'/display');
324 $edit = array(
325 'fields[field_'. $single_field_name_machine .'][label]' => 'above',
326 'fields[field_'. $single_field_name_machine .'][type]' => 'link_short',
327 );
328 $this->drupalPost(NULL, $edit, t('Save'));
329
330 $this->createNodeTypeUser($content_type_machine);
331
332 $link_tests = array(
333 'plain' => array(
334 'text' => 'Display',
335 'url' => 'http://www.example.com/',
336 ),
337 'query' => array(
338 'text' => 'Display',
339 'url' => 'http://www.example.com/?q=test',
340 ),
341 'fragment' => array(
342 'text' => 'Display',
343 'url' => 'http://www.example.com/#test',
344 ),
345 );
346
347 foreach ($link_tests as $key => $link_test) {
348 $link_text = $link_test['text'];
349 $link_url = $link_test['url'];
350 $this->createNodeForTesting($content_type_machine, $content_type_friendly, $single_field_name_machine, $link_text, $link_url);
351
352 $this->assertText('Link');
353 $this->assertNoText($link_text);
354 $this->assertLinkByHref($link_url);
355 }
356 }
357
358 function testFormatterLabel() {
359 $content_type_friendly = $this->randomName(20);
360 $content_type_machine = strtolower($this->randomName(10));
361
362 $this->drupalCreateContentType(array(
363 'type' => $content_type_machine,
364 'name' => $content_type_friendly,
365 ));
366
367 // Now add a singleton field.
368 $single_field_name_friendly = $this->randomName(20);
369 $single_field_name_machine = strtolower($this->randomName(10));
370 //$single_field_name = 'field_'. $single_field_name_machine;
371 $this->createSimpleLinkField($single_field_name_machine, $single_field_name_friendly, $content_type_machine);
372
373 // Okay, now we want to make sure this display is changed:
374 $this->drupalGet('admin/structure/types/manage/'. $content_type_machine .'/display');
375 $edit = array(
376 'fields[field_'. $single_field_name_machine .'][label]' => 'above',
377 'fields[field_'. $single_field_name_machine .'][type]' => 'link_label',
378 );
379 $this->drupalPost(NULL, $edit, t('Save'));
380
381 $this->createNodeTypeUser($content_type_machine);
382
383 $link_tests = array(
384 'plain' => array(
385 'text' => 'Display',
386 'url' => 'http://www.example.com/',
387 ),
388 'query' => array(
389 'text' => 'Display',
390 'url' => 'http://www.example.com/?q=test',
391 ),
392 'fragment' => array(
393 'text' => 'Display',
394 'url' => 'http://www.example.com/#test',
395 ),
396 );
397
398 foreach ($link_tests as $key => $link_test) {
399 $link_text = $link_test['text'];
400 $link_url = $link_test['url'];
401 $this->createNodeForTesting($content_type_machine, $content_type_friendly, $single_field_name_machine, $link_text, $link_url);
402
403 $this->assertNoText($link_text);
404 $this->assertText($single_field_name_friendly);
405 $this->assertLinkByHref($link_url);
406 }
407 }
408
409 function testFormatterSeparate() {
410 $content_type_friendly = $this->randomName(20);
411 $content_type_machine = strtolower($this->randomName(10));
412
413 $this->drupalCreateContentType(array(
414 'type' => $content_type_machine,
415 'name' => $content_type_friendly,
416 ));
417
418 // Now add a singleton field.
419 $single_field_name_friendly = $this->randomName(20);
420 $single_field_name_machine = strtolower($this->randomName(10));
421 //$single_field_name = 'field_'. $single_field_name_machine;
422 $this->createSimpleLinkField($single_field_name_machine, $single_field_name_friendly, $content_type_machine);
423
424 // Okay, now we want to make sure this display is changed:
425 $this->drupalGet('admin/structure/types/manage/'. $content_type_machine .'/display');
426 $edit = array(
427 'fields[field_'. $single_field_name_machine .'][label]' => 'above',
428 'fields[field_'. $single_field_name_machine .'][type]' => 'link_separate',
429 );
430 $this->drupalPost(NULL, $edit, t('Save'));
431
432 $this->createNodeTypeUser($content_type_machine);
433
434 $plain_url = 'http://www.example.com/';
435 $link_tests = array(
436 'plain' => array(
437 'text' => $this->randomName(20),
438 'url' => $plain_url,
439 ),
440 'query' => array(
441 'text' => $this->randomName(20),
442 'url' => $plain_url . '?q=test',
443 ),
444 'fragment' => array(
445 'text' => $this->randomName(20),
446 'url' => $plain_url . '#test',
447 ),
448 );
449
450 foreach ($link_tests as $key => $link_test) {
451 $link_text = $link_test['text'];
452 $link_url = $link_test['url'];
453 $this->createNodeForTesting($content_type_machine, $content_type_friendly, $single_field_name_machine, $link_text, $link_url);
454
455 $this->assertText($link_text);
456 $this->assertLink($plain_url);
457 $this->assertLinkByHref($link_url);
458 }
459 }
460
461 function testFormatterPlainTitle() {
462 $content_type_friendly = $this->randomName(20);
463 $content_type_machine = strtolower($this->randomName(10));
464
465 $this->drupalCreateContentType(array(
466 'type' => $content_type_machine,
467 'name' => $content_type_friendly,
468 ));
469
470 // Now add a singleton field.
471 $single_field_name_friendly = $this->randomName(20);
472 $single_field_name_machine = strtolower($this->randomName(10));
473 //$single_field_name = 'field_'. $single_field_name_machine;
474 $this->createSimpleLinkField($single_field_name_machine, $single_field_name_friendly, $content_type_machine);
475
476 // Okay, now we want to make sure this display is changed:
477 $this->drupalGet('admin/structure/types/manage/'. $content_type_machine .'/display');
478 $edit = array(
479 'fields[field_'. $single_field_name_machine .'][label]' => 'above',
480 'fields[field_'. $single_field_name_machine .'][type]' => 'link_title_plain',
481 );
482 $this->drupalPost(NULL, $edit, t('Save'));
483
484 $this->createNodeTypeUser($content_type_machine);
485
486 $link_text = 'Display';
487 $link_url = 'http://www.example.com/';
488 $this->createNodeForTesting($content_type_machine, $content_type_friendly, $single_field_name_machine, $link_text, $link_url);
489
490 $this->assertText($link_text);
491 $this->assertNoText($link_url);
492 $this->assertNoLinkByHref($link_url);
493 }
494 }