You are here

context.conditions.test in Context 7.3

Same filename and directory in other branches
  1. 6.3 tests/context.conditions.test
  2. 6 tests/context.conditions.test

File

tests/context.conditions.test
View source
<?php

class ContextConditionUserTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: user',
      'description' => 'Test user condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools');
    $this->user1 = $this
      ->drupalCreateUser(array(
      'access content',
      'administer site configuration',
    ));
    $this->user2 = $this
      ->drupalCreateUser(array(
      'access content',
    ));

    // The role name is not reliably put on the user object. Retrive from
    // user_roles().
    $role = '';
    foreach (array_keys($this->user1->roles) as $rid) {
      if ($rid !== DRUPAL_AUTHENTICATED_RID) {
        $role = user_role_load($rid)->name;
        break;
      }
    }

    // Create test context.
    ctools_include('export');
    $this->context = ctools_export_new_object('context');
    $this->context->name = 'testcontext';
    $this->context->conditions = array(
      'user' => array(
        'values' => array(
          $role,
        ),
      ),
    );
    $this->context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($this->context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
  }
  function test() {

    // User 1 triggers the context.
    $this
      ->drupalLogin($this->user1);
    $this
      ->drupalGet('node');
    $this
      ->assertText('Active context: testcontext');

    // User 2 does not.
    $this
      ->drupalLogin($this->user2);
    $this
      ->drupalGet('node');
    $this
      ->assertNoText('Active context: testcontext');
  }

}
class ContextConditionNagateUserTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: nagate user',
      'description' => 'Test nagate user condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools');
    $this->user1 = $this
      ->drupalCreateUser(array(
      'access content',
      'administer site configuration',
    ));

    // Create test context.
    ctools_include('export');
    $this->context = ctools_export_new_object('context');
    $this->context->name = 'testcontext';
    $this->context->conditions = array(
      'user' => array(
        'values' => array(
          'authenticated user' => 'authenticated user',
        ),
        'options' => array(
          'negate_role' => 1,
        ),
      ),
    );
    $this->context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($this->context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
  }
  function test() {

    // User 1 does not trigger the context.
    $this
      ->drupalLogin($this->user1);
    $this
      ->drupalGet('node');
    $this
      ->assertNoText('Active context: testcontext');

    // Anonymous triggers the context.
    $this
      ->drupalLogout();
    $this
      ->drupalGet('');
    $this
      ->assertText('Active context: testcontext');
  }

}
class ContextConditionUserPageTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: user page',
      'description' => 'Test user page condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools');
    $this->user1 = $this
      ->drupalCreateUser(array(
      'access user profiles',
      'access content',
      'administer site configuration',
    ));
    $this->user2 = $this
      ->drupalCreateUser(array(
      'access user profiles',
      'access content',
    ));

    // Create test context.
    ctools_include('export');
    $this->context = ctools_export_new_object('context');
    $this->context->name = 'testcontext';
    $this->context->conditions = array(
      'user_page' => array(
        'values' => array(
          'view' => 'view',
        ),
        'options' => array(
          'mode' => 'all',
        ),
      ),
    );
    $this->context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($this->context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
  }
  function test() {

    // Viewing any user profile triggers context.
    $this
      ->drupalLogin($this->user1);
    $this
      ->drupalGet("user/{$this->user1->uid}");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("user/{$this->user2->uid}");
    $this
      ->assertText('Active context: testcontext');

    // User form does not.
    $this
      ->drupalGet("user/{$this->user1->uid}/edit");
    $this
      ->assertNoText('Active context: testcontext');

    // Test current user mode
    $this->context->conditions['user_page']['options']['mode'] = 'current';
    $saved = context_save($this->context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet("user/{$this->user1->uid}");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("user/{$this->user2->uid}");
    $this
      ->assertNoText('Active context: testcontext');

    // Test other user mode
    $this->context->conditions['user_page']['options']['mode'] = 'other';
    $saved = context_save($this->context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet("user/{$this->user1->uid}");
    $this
      ->assertNoText('Active context: testcontext');
    $this
      ->drupalGet("user/{$this->user2->uid}");
    $this
      ->assertText('Active context: testcontext');
  }

}
class ContextConditionNodeTaxonomyTest extends DrupalWebTestCase {

  // We want the default taxonomy and content types created
  protected $profile = 'standard';
  public static function getInfo() {
    return array(
      'name' => 'Condition: taxonomy',
      'description' => 'Test taxonomy condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools', 'taxonomy');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
      'create article content',
    ));
    $this
      ->drupalLogin($admin_user);

    // Create test terms.
    $this->vocab = taxonomy_vocabulary_machine_name_load('tags');
    $this->terms = array();
    $this->terms['apples'] = (object) array(
      'name' => 'apples',
      'vid' => $this->vocab->vid,
    );
    $this->terms['oranges'] = (object) array(
      'name' => 'oranges',
      'vid' => $this->vocab->vid,
    );
    taxonomy_term_save($this->terms['apples']);
    taxonomy_term_save($this->terms['oranges']);

    // Create test context.
    ctools_include('export');
    $this->context = ctools_export_new_object('context');
    $this->context->name = 'testcontext';
    $this->context->conditions = array(
      'node_taxonomy' => array(
        'values' => array(
          $this->terms['apples']->tid,
        ),
      ),
    );
    $this->context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($this->context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
  }
  function test() {

    // Apples does trigger the context.
    $edit = array(
      'title' => 'Apples',
      'field_tags[und]' => $this->terms['apples']->name,
    );
    $this
      ->drupalPost('node/add/article', $edit, t('Save'));
    $node = $this
      ->drupalGetNodeByTitle($edit['title']);
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertText('Active context: testcontext');

    // Oranges does not trigger the context.
    $edit = array(
      'title' => 'Oranges',
      'field_tags[und]' => $this->terms['oranges']->name,
    );
    $this
      ->drupalPost('node/add/article', $edit, t('Save'));
    $node = $this
      ->drupalGetNodeByTitle($edit['title']);
    $this
      ->drupalGet('node/' . $node->nid);
    $this
      ->assertNoText('Active context: testcontext');
  }

}
class ContextConditionLanguageTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: language',
      'description' => 'Test language condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools', 'locale');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
      'administer languages',
    ));
    $this
      ->drupalLogin($admin_user);
    $this
      ->drupalPost('admin/config/development/performance', array(), t('Clear all caches'));

    // Set up Spanish as second language.
    $this
      ->drupalPost('admin/config/regional/language/add', array(
      'langcode' => 'es',
    ), t('Add language'));
    $this
      ->drupalPost('admin/config/regional/language/configure', array(
      'language[enabled][locale-url]' => 1,
    ), t('Save settings'));
  }
  function test() {
    ctools_include('export');
    $context = ctools_export_new_object('context');
    $context->name = 'testcontext';
    $context->conditions = array(
      'language' => array(
        'values' => array(
          'es',
        ),
      ),
    );
    $context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet('node');
    $this
      ->assertNoText('Active context: testcontext');
    $this
      ->drupalGet('es/node');
    $this
      ->assertText('Active context: testcontext');

    // Cleanup
    context_delete($context);
  }

}
class ContextConditionSitewideTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: sitewide',
      'description' => 'Test sitewide condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
    ));
    $this
      ->drupalLogin($admin_user);
  }
  function test() {
    ctools_include('export');
    $context = ctools_export_new_object('context');
    $context->name = 'testcontext';
    $context->conditions = array(
      'sitewide' => array(
        'values' => array(
          1,
        ),
      ),
    );
    $context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet('node');
    $this
      ->assertText('Active context: testcontext');

    // Cleanup
    context_delete($context);
  }

}
class ContextConditionPathTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: path',
      'description' => 'Test path condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools', 'path');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
      'administer nodes',
    ));
    $this
      ->drupalLogin($admin_user);
  }
  function test() {
    ctools_include('export');
    $context = ctools_export_new_object('context');
    $context->name = 'testcontext';
    $context->conditions = array(
      'path' => array(
        'values' => array(
          'admin',
          'node/*',
        ),
      ),
    );
    $context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet('admin');
    $this
      ->assertText('Active context: testcontext');
    $node = $this
      ->drupalCreateNode();
    $this
      ->drupalGet("node/{$node->nid}");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet('node');
    $this
      ->assertNoText('Active context: testcontext');

    // Cleanup
    context_delete($context);

    // @TODO: Test with path alias
    // @TODO: Test with language prefixes
  }

}
class ContextConditionContextTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: context',
      'description' => 'Test context condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
      'administer nodes',
    ));
    $this
      ->drupalLogin($admin_user);
  }
  function test() {
    ctools_include('export');
    $context = ctools_export_new_object('context');
    $context->name = 'testcontext';
    $context->conditions = array(
      'path' => array(
        'values' => array(
          'admin',
        ),
      ),
    );
    $context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $subcontext = ctools_export_new_object('context');
    $subcontext->name = 'subcontext';
    $subcontext->conditions = array(
      'context' => array(
        'values' => array(
          'testcontext',
        ),
      ),
    );
    $subcontext->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($subcontext);
    $this
      ->assertTrue($saved, "Context 'subcontext' saved.");
    $this
      ->drupalGet('admin');
    $this
      ->assertText('Active context: testcontext');
    $this
      ->assertText('Active context: subcontext');

    // Cleanup
    context_delete($context);

    // @TODO: Test exclusion
  }

}
class ContextConditionNodeTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: node',
      'description' => 'Test node condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools', 'blog', 'book');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
      'administer nodes',
      'create blog content',
      'create book content',
    ));
    $this
      ->drupalLogin($admin_user);
  }
  function test() {
    ctools_include('export');
    $context = ctools_export_new_object('context');
    $context->name = 'testcontext';
    $context->conditions = array(
      'node' => array(
        'values' => array(
          'blog',
        ),
      ),
    );
    $context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet("node/add/blog");
    $this
      ->assertNoText('Active context: testcontext');
    $this
      ->drupalGet("node/add/book");
    $this
      ->assertNoText('Active context: testcontext');
    $node = $this
      ->drupalCreateNode(array(
      'type' => 'blog',
    ));
    $this
      ->drupalGet("node/{$node->nid}");
    $this
      ->assertText('Active context: testcontext');
    $node = $this
      ->drupalCreateNode(array(
      'type' => 'book',
    ));
    $this
      ->drupalGet("node/{$node->nid}");
    $this
      ->assertNoText('Active context: testcontext');
    $context->conditions['node']['options']['node_form'] = 1;
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet("node/add/blog");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("node/add/book");
    $this
      ->assertNoText('Active context: testcontext');

    // Cleanup
    context_delete($context);
  }

}
class ContextConditionMenuTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: menu',
      'description' => 'Test menu condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools', 'blog', 'menu');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
      'administer nodes',
      'create blog content',
    ));
    $this
      ->drupalLogin($admin_user);
  }
  function test() {
    ctools_include('export');
    $context = ctools_export_new_object('context');
    $context->name = 'testcontext';
    $context->conditions = array(
      'menu' => array(
        'values' => array(
          'node/add',
        ),
      ),
    );
    $context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet("node/add/blog");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("node/add");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("node");
    $this
      ->assertNoText('Active context: testcontext');

    // Cleanup
    context_delete($context);
  }

}
class ContextConditionBookTest extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: book',
      'description' => 'Test book condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools', 'book', 'menu');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
      'administer nodes',
    ));
    $this
      ->drupalLogin($admin_user);
  }
  function test() {
    $book = $this
      ->drupalCreateNode(array(
      'type' => 'book',
      'book' => array(
        'bid' => 'new',
      ),
    ));
    $child = $this
      ->drupalCreateNode(array(
      'type' => 'book',
      'book' => array(
        'bid' => $book->nid,
      ),
    ));
    $dummy = $this
      ->drupalCreateNode(array(
      'type' => 'book',
    ));
    ctools_include('export');
    $context = ctools_export_new_object('context');
    $context->name = 'testcontext';
    $context->conditions = array(
      'book' => array(
        'values' => array(
          book_menu_name($book->book['bid']),
        ),
      ),
    );
    $context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet("node/{$book->nid}");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("node/{$child->nid}");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("node/{$dummy->nid}");
    $this
      ->assertNoText('Active context: testcontext');

    // Cleanup
    context_delete($context);
  }

}
class ContextConditionBookroot extends DrupalWebTestCase {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'Condition: bookroot',
      'description' => 'Test bookroot condition.',
      'group' => 'Context',
    );
  }
  function setUp() {
    parent::setUp('context', 'ctools', 'book', 'menu');
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
      'administer nodes',
      'create book content',
      'edit any book content',
    ));
    $this
      ->drupalLogin($admin_user);
    variable_set('book_allowed_types', array(
      'book',
      'page',
    ));
  }
  function test() {
    $book = $this
      ->drupalCreateNode(array(
      'type' => 'book',
      'book' => array(
        'bid' => 'new',
      ),
    ));
    $child = $this
      ->drupalCreateNode(array(
      'type' => 'book',
      'book' => array(
        'bid' => $book->nid,
      ),
    ));
    $dummy = $this
      ->drupalCreateNode(array(
      'type' => 'page',
      'book' => array(
        'bid' => 'new',
      ),
    ));
    $dummy_child = $this
      ->drupalCreateNode(array(
      'type' => 'page',
      'book' => array(
        'bid' => $dummy->nid,
      ),
    ));
    ctools_include('export');
    $context = ctools_export_new_object('context');
    $context->name = 'testcontext';
    $context->conditions = array(
      'bookroot' => array(
        'values' => array(
          'book',
        ),
      ),
    );
    $context->reactions = array(
      'debug' => array(
        'debug' => TRUE,
      ),
    );
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet("node/{$book->nid}");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("node/{$child->nid}");
    $this
      ->assertText('Active context: testcontext');
    $this
      ->drupalGet("node/{$dummy->nid}");
    $this
      ->assertNoText('Active context: testcontext');
    $this
      ->drupalGet("node/{$dummy_child->nid}");
    $this
      ->assertNoText('Active context: testcontext');
    $this
      ->drupalGet("node/{$book->nid}/edit");
    $this
      ->assertNoText('Active context: testcontext');
    $context->conditions['bookroot']['options']['node_form'] = 1;
    $saved = context_save($context);
    $this
      ->assertTrue($saved, "Context 'testcontext' saved.");
    $this
      ->drupalGet("node/{$book->nid}/edit");
    $this
      ->assertText('Active context: testcontext');

    // Cleanup
    context_delete($context);
  }

}