upgrade omega again
[indybay:drupal.git] / docs / sites / all / modules / contrib / context / tests / context.conditions.test
1 <?php
2
3 class ContextConditionUserTest extends DrupalWebTestCase {
4   protected $profile = 'testing';
5
6   public static function getInfo() {
7     return array(
8       'name' => 'Condition: user',
9       'description' => 'Test user condition.',
10       'group' => 'Context',
11     );
12   }
13
14   function setUp() {
15     parent::setUp('context', 'ctools');
16     $this->user1 = $this->drupalCreateUser(array('access content', 'administer site configuration'));
17     $this->user2 = $this->drupalCreateUser(array('access content'));
18
19     // The role name is not reliably put on the user object. Retrive from
20     // user_roles().
21     $role = '';
22     foreach (array_keys($this->user1->roles) as $rid) {
23       if ($rid !== DRUPAL_AUTHENTICATED_RID) {
24         $role = user_role_load($rid)->name;
25         break;
26       }
27     }
28
29     // Create test context.
30     ctools_include('export');
31     $this->context = ctools_export_new_object('context');
32     $this->context->name = 'testcontext';
33     $this->context->conditions = array('user' => array('values' => array($role)));
34     $this->context->reactions = array('debug' => array('debug' => TRUE));
35     $saved = context_save($this->context);
36     $this->assertTrue($saved, "Context 'testcontext' saved.");
37   }
38
39   function tearDown() {
40     parent::tearDown();
41     context_delete($this->context);
42     user_delete($this->user1->uid);
43     user_delete($this->user2->uid);
44   }
45
46   function test() {
47     // User 1 triggers the context.
48     $this->drupalLogin($this->user1);
49     $this->drupalGet('node');
50     $this->assertText('Active context: testcontext');
51
52     // User 2 does not.
53     $this->drupalLogin($this->user2);
54     $this->drupalGet('node');
55     $this->assertNoText('Active context: testcontext');
56   }
57 }
58
59 class ContextConditionUserPageTest extends DrupalWebTestCase {
60   protected $profile = 'testing';
61
62   public static function getInfo() {
63     return array(
64       'name' => 'Condition: user page',
65       'description' => 'Test user page condition.',
66       'group' => 'Context',
67     );
68   }
69
70   function setUp() {
71     parent::setUp('context', 'ctools');
72     $this->user1 = $this->drupalCreateUser(array('access user profiles', 'access content', 'administer site configuration'));
73     $this->user2 = $this->drupalCreateUser(array('access user profiles', 'access content'));
74
75     // Create test context.
76     ctools_include('export');
77     $this->context = ctools_export_new_object('context');
78     $this->context->name = 'testcontext';
79     $this->context->conditions = array('user_page' => array('values' => array('view' => 'view'), 'options' => array('mode' => 'all')));
80     $this->context->reactions = array('debug' => array('debug' => TRUE));
81     $saved = context_save($this->context);
82     $this->assertTrue($saved, "Context 'testcontext' saved.");
83   }
84
85   function tearDown() {
86     parent::tearDown();
87     context_delete($this->context);
88     $edit = array();
89     user_delete($this->user1->uid);
90     user_delete($this->user2->uid);
91   }
92
93   function test() {
94     // Viewing any user profile triggers context.
95     $this->drupalLogin($this->user1);
96     $this->drupalGet("user/{$this->user1->uid}");
97     $this->assertText('Active context: testcontext');
98     $this->drupalGet("user/{$this->user2->uid}");
99     $this->assertText('Active context: testcontext');
100     // User form does not.
101     $this->drupalGet("user/{$this->user1->uid}/edit");
102     $this->assertNoText('Active context: testcontext');
103
104     // Test current user mode
105     $this->context->conditions['user_page']['options']['mode'] = 'current';
106     $saved = context_save($this->context);
107     $this->assertTrue($saved, "Context 'testcontext' saved.");
108     $this->drupalGet("user/{$this->user1->uid}");
109     $this->assertText('Active context: testcontext');
110     $this->drupalGet("user/{$this->user2->uid}");
111     $this->assertNoText('Active context: testcontext');
112
113     // Test other user mode
114     $this->context->conditions['user_page']['options']['mode'] = 'other';
115     $saved = context_save($this->context);
116     $this->assertTrue($saved, "Context 'testcontext' saved.");
117     $this->drupalGet("user/{$this->user1->uid}");
118     $this->assertNoText('Active context: testcontext');
119     $this->drupalGet("user/{$this->user2->uid}");
120     $this->assertText('Active context: testcontext');
121   }
122 }
123
124 class ContextConditionNodeTaxonomyTest extends DrupalWebTestCase {
125   // We want the default taxonomy and content types created
126   protected $profile = 'standard';
127
128   public static function getInfo() {
129     return array(
130       'name' => 'Condition: taxonomy',
131       'description' => 'Test taxonomy condition.',
132       'group' => 'Context',
133     );
134   }
135
136   function setUp() {
137     parent::setUp('context', 'ctools', 'taxonomy');
138     $admin_user = $this->drupalCreateUser(array('administer site configuration', 'create article content'));
139     $this->drupalLogin($admin_user);
140
141     // Create test terms.
142     $this->vocab = taxonomy_vocabulary_machine_name_load('tags');
143
144     $this->terms = array();
145     $this->terms['apples'] = (object)array('name' => 'apples', 'vid' => $this->vocab->vid);
146     $this->terms['oranges'] = (object)array('name' => 'oranges', 'vid' => $this->vocab->vid);
147     taxonomy_term_save($this->terms['apples']);
148     taxonomy_term_save($this->terms['oranges']);
149
150     // Create test context.
151     ctools_include('export');
152     $this->context = ctools_export_new_object('context');
153     $this->context->name = 'testcontext';
154     $this->context->conditions = array('node_taxonomy' => array('values' => array($this->terms['apples']->tid)));
155     $this->context->reactions = array('debug' => array('debug' => TRUE));
156     $saved = context_save($this->context);
157     $this->assertTrue($saved, "Context 'testcontext' saved.");
158   }
159
160   function tearDown() {
161     parent::tearDown();
162     context_delete($this->context);
163     taxonomy_term_delete($this->terms['apples']->tid);
164     taxonomy_term_delete($this->terms['oranges']->tid);
165   }
166
167   function test() {
168     // Apples does trigger the context.
169     $edit = array(
170       'title' => 'Apples', 
171       'field_tags[und]' => $this->terms['apples']->name
172     );
173     $this->drupalPost('node/add/article', $edit, t('Save'));
174     $node = $this->drupalGetNodeByTitle($edit['title']);
175     $this->drupalGet('node/' . $node->nid);
176     $this->assertText('Active context: testcontext');
177
178     // Oranges does not trigger the context.
179     $edit = array(
180       'title' => 'Oranges', 
181       'field_tags[und]' => $this->terms['oranges']->name
182     );
183     $this->drupalPost('node/add/article', $edit, t('Save'));
184     $node = $this->drupalGetNodeByTitle($edit['title']);
185     $this->drupalGet('node/' . $node->nid);
186     $this->assertNoText('Active context: testcontext');
187   }
188 }
189
190 class ContextConditionLanguageTest extends DrupalWebTestCase {
191   protected $profile = 'testing';
192
193   public static function getInfo() {
194     return array(
195       'name' => 'Condition: language',
196       'description' => 'Test language condition.',
197       'group' => 'Context',
198     );
199   }
200
201   function setUp() {
202     parent::setUp('context', 'ctools', 'locale');
203     $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer languages'));
204     $this->drupalLogin($admin_user);
205     $this->drupalPost('admin/config/development/performance', array(), t('Clear all caches'));
206
207     // Set up Spanish as second language.
208     $this->drupalPost('admin/config/regional/language/add', array('langcode' => 'es'), t('Add language'));
209     $this->drupalPost('admin/config/regional/language/configure', array('language[enabled][locale-url]' => 1), t('Save settings'));
210   }
211
212   function test() {
213     ctools_include('export');
214     $context = ctools_export_new_object('context');
215     $context->name = 'testcontext';
216     $context->conditions = array('language' => array('values' => array('es')));
217     $context->reactions = array('debug' => array('debug' => TRUE));
218     $saved = context_save($context);
219     $this->assertTrue($saved, "Context 'testcontext' saved.");
220
221     $this->drupalGet('node');
222     $this->assertNoText('Active context: testcontext');
223
224     $this->drupalGet('es/node');
225     $this->assertText('Active context: testcontext');
226
227     // Cleanup
228     context_delete($context);
229   }
230 }
231
232 class ContextConditionSitewideTest extends DrupalWebTestCase {
233   protected $profile = 'testing';
234
235   public static function getInfo() {
236     return array(
237       'name' => 'Condition: sitewide',
238       'description' => 'Test sitewide condition.',
239       'group' => 'Context',
240     );
241   }
242
243   function setUp() {
244     parent::setUp('context', 'ctools');
245     $admin_user = $this->drupalCreateUser(array('administer site configuration'));
246     $this->drupalLogin($admin_user);
247   }
248
249   function test() {
250     ctools_include('export');
251     $context = ctools_export_new_object('context');
252     $context->name = 'testcontext';
253     $context->conditions = array('sitewide' => array('values' => array(1)));
254     $context->reactions = array('debug' => array('debug' => TRUE));
255     $saved = context_save($context);
256     $this->assertTrue($saved, "Context 'testcontext' saved.");
257
258     $this->drupalGet('node');
259     $this->assertText('Active context: testcontext');
260
261     // Cleanup
262     context_delete($context);
263   }
264 }
265
266 class ContextConditionPathTest extends DrupalWebTestCase {
267   protected $profile = 'testing';
268
269   public static function getInfo() {
270     return array(
271       'name' => 'Condition: path',
272       'description' => 'Test path condition.',
273       'group' => 'Context',
274     );
275   }
276
277   function setUp() {
278     parent::setUp('context', 'ctools', 'path');
279     $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer nodes'));
280     $this->drupalLogin($admin_user);
281   }
282
283   function test() {
284     ctools_include('export');
285     $context = ctools_export_new_object('context');
286     $context->name = 'testcontext';
287     $context->conditions = array('path' => array('values' => array('admin', 'node/*')));
288     $context->reactions = array('debug' => array('debug' => TRUE));
289     $saved = context_save($context);
290     $this->assertTrue($saved, "Context 'testcontext' saved.");
291
292     $this->drupalGet('admin');
293     $this->assertText('Active context: testcontext');
294
295     $node = $this->drupalCreateNode();
296     $this->drupalGet("node/{$node->nid}");
297     $this->assertText('Active context: testcontext');
298
299     $this->drupalGet('node');
300     $this->assertNoText('Active context: testcontext');
301
302     // Cleanup
303     context_delete($context);
304
305     // @TODO: Test with path alias
306     // @TODO: Test with language prefixes
307   }
308 }
309
310 class ContextConditionContextTest extends DrupalWebTestCase {
311   protected $profile = 'testing';
312
313   public static function getInfo() {
314     return array(
315       'name' => 'Condition: context',
316       'description' => 'Test context condition.',
317       'group' => 'Context',
318     );
319   }
320
321   function setUp() {
322     parent::setUp('context', 'ctools');
323     $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer nodes'));
324     $this->drupalLogin($admin_user);
325   }
326
327   function test() {
328     ctools_include('export');
329     $context = ctools_export_new_object('context');
330     $context->name = 'testcontext';
331     $context->conditions = array('path' => array('values' => array('admin')));
332     $context->reactions = array('debug' => array('debug' => TRUE));
333     $saved = context_save($context);
334     $this->assertTrue($saved, "Context 'testcontext' saved.");
335
336     $subcontext = ctools_export_new_object('context');
337     $subcontext->name = 'subcontext';
338     $subcontext->conditions = array('context' => array('values' => array('testcontext')));
339     $subcontext->reactions = array('debug' => array('debug' => TRUE));
340     $saved = context_save($subcontext);
341     $this->assertTrue($saved, "Context 'subcontext' saved.");
342
343     $this->drupalGet('admin');
344     $this->assertText('Active context: testcontext');
345     $this->assertText('Active context: subcontext');
346
347     // Cleanup
348     context_delete($context);
349
350     // @TODO: Test exclusion
351   }
352 }
353
354 class ContextConditionNodeTest extends DrupalWebTestCase {
355   protected $profile = 'testing';
356
357   public static function getInfo() {
358     return array(
359       'name' => 'Condition: node',
360       'description' => 'Test node condition.',
361       'group' => 'Context',
362     );
363   }
364
365   function setUp() {
366     parent::setUp('context', 'ctools', 'blog', 'book');
367     $admin_user = $this->drupalCreateUser(array(
368       'administer site configuration',
369       'administer nodes',
370       'create blog content',
371       'create book content'
372     ));
373     $this->drupalLogin($admin_user);
374   }
375
376   function test() {
377     ctools_include('export');
378     $context = ctools_export_new_object('context');
379     $context->name = 'testcontext';
380     $context->conditions = array('node' => array('values' => array('blog')));
381     $context->reactions = array('debug' => array('debug' => TRUE));
382     $saved = context_save($context);
383     $this->assertTrue($saved, "Context 'testcontext' saved.");
384
385     $this->drupalGet("node/add/blog");
386     $this->assertNoText('Active context: testcontext');
387
388     $this->drupalGet("node/add/book");
389     $this->assertNoText('Active context: testcontext');
390
391     $node = $this->drupalCreateNode(array('type' => 'blog'));
392     $this->drupalGet("node/{$node->nid}");
393     $this->assertText('Active context: testcontext');
394
395     $node = $this->drupalCreateNode(array('type' => 'book'));
396     $this->drupalGet("node/{$node->nid}");
397     $this->assertNoText('Active context: testcontext');
398
399     $context->conditions['node']['options']['node_form'] = 1;
400     $saved = context_save($context);
401     $this->assertTrue($saved, "Context 'testcontext' saved.");
402
403     $this->drupalGet("node/add/blog");
404     $this->assertText('Active context: testcontext');
405
406     $this->drupalGet("node/add/book");
407     $this->assertNoText('Active context: testcontext');
408
409     // Cleanup
410     context_delete($context);
411   }
412 }
413
414 class ContextConditionMenuTest extends DrupalWebTestCase {
415   protected $profile = 'testing';
416
417   public static function getInfo() {
418     return array(
419       'name' => 'Condition: menu',
420       'description' => 'Test menu condition.',
421       'group' => 'Context',
422     );
423   }
424
425   function setUp() {
426     parent::setUp('context', 'ctools', 'blog', 'menu');
427     $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer nodes', 'create blog content'));
428     $this->drupalLogin($admin_user);
429   }
430
431   function test() {
432     ctools_include('export');
433     $context = ctools_export_new_object('context');
434     $context->name = 'testcontext';
435     $context->conditions = array('menu' => array('values' => array('node/add')));
436     $context->reactions = array('debug' => array('debug' => TRUE));
437     $saved = context_save($context);
438     $this->assertTrue($saved, "Context 'testcontext' saved.");
439
440     $this->drupalGet("node/add/blog");
441     $this->assertText('Active context: testcontext');
442
443     $this->drupalGet("node/add");
444     $this->assertText('Active context: testcontext');
445
446     $this->drupalGet("node");
447     $this->assertNoText('Active context: testcontext');
448
449     // Cleanup
450     context_delete($context);
451   }
452 }
453
454 class ContextConditionBookTest extends DrupalWebTestCase {
455   protected $profile = 'testing';
456
457   public static function getInfo() {
458     return array(
459       'name' => 'Condition: book',
460       'description' => 'Test book condition.',
461       'group' => 'Context',
462     );
463   }
464
465   function setUp() {
466     parent::setUp('context', 'ctools', 'book', 'menu');
467     $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer nodes'));
468     $this->drupalLogin($admin_user);
469   }
470
471   function test() {
472     $book = $this->drupalCreateNode(array('type' => 'book', 'book' => array('bid' => 'new')));
473     $child = $this->drupalCreateNode(array('type' => 'book', 'book' => array('bid' => $book->nid)));
474     $dummy = $this->drupalCreateNode(array('type' => 'book'));
475
476     ctools_include('export');
477     $context = ctools_export_new_object('context');
478     $context->name = 'testcontext';
479     $context->conditions = array('book' => array('values' => array(book_menu_name($book->book['bid']))));
480     $context->reactions = array('debug' => array('debug' => TRUE));
481     $saved = context_save($context);
482     $this->assertTrue($saved, "Context 'testcontext' saved.");
483
484     $this->drupalGet("node/{$book->nid}");
485     $this->assertText('Active context: testcontext');
486
487     $this->drupalGet("node/{$child->nid}");
488     $this->assertText('Active context: testcontext');
489
490     $this->drupalGet("node/{$dummy->nid}");
491     $this->assertNoText('Active context: testcontext');
492
493     // Cleanup
494     context_delete($context);
495   }
496 }
497
498 class ContextConditionBookroot extends DrupalWebTestCase {
499   protected $profile = 'testing';
500
501   public static function getInfo() {
502     return array(
503       'name' => 'Condition: bookroot',
504       'description' => 'Test bookroot condition.',
505       'group' => 'Context',
506     );
507   }
508
509   function setUp() {
510     parent::setUp('context', 'ctools', 'book', 'menu');
511     $admin_user = $this->drupalCreateUser(array(
512       'administer site configuration',
513       'administer nodes',
514       'create book content',
515       'edit any book content',
516     ));
517     $this->drupalLogin($admin_user);
518     variable_set('book_allowed_types', array('book', 'page'));
519   }
520
521   function test() {
522     $book = $this->drupalCreateNode(array('type' => 'book', 'book' => array('bid' => 'new')));
523     $child = $this->drupalCreateNode(array('type' => 'book', 'book' => array('bid' => $book->nid)));
524
525     $dummy = $this->drupalCreateNode(array('type' => 'page', 'book' => array('bid' => 'new')));
526     $dummy_child = $this->drupalCreateNode(array('type' => 'page', 'book' => array('bid' => $dummy->nid)));
527
528     ctools_include('export');
529     $context = ctools_export_new_object('context');
530     $context->name = 'testcontext';
531     $context->conditions = array('bookroot' => array('values' => array('book')));
532     $context->reactions = array('debug' => array('debug' => TRUE));
533     $saved = context_save($context);
534     $this->assertTrue($saved, "Context 'testcontext' saved.");
535
536     $this->drupalGet("node/{$book->nid}");
537     $this->assertText('Active context: testcontext');
538
539     $this->drupalGet("node/{$child->nid}");
540     $this->assertText('Active context: testcontext');
541
542     $this->drupalGet("node/{$dummy->nid}");
543     $this->assertNoText('Active context: testcontext');
544
545     $this->drupalGet("node/{$dummy_child->nid}");
546     $this->assertNoText('Active context: testcontext');
547
548     $this->drupalGet("node/{$book->nid}/edit");
549     $this->assertNoText('Active context: testcontext');
550
551     $context->conditions['bookroot']['options']['node_form'] = 1;
552     $saved = context_save($context);
553     $this->assertTrue($saved, "Context 'testcontext' saved.");
554
555     $this->drupalGet("node/{$book->nid}/edit");
556     $this->assertText('Active context: testcontext');
557
558     // Cleanup
559     context_delete($context);
560   }
561 }