title = $this->randomName(); $queue->subqueue_title = ''; $queue->size = $size; $queue->reverse = $reverse; $queue->types = array('page', 'story'); $queue->roles = $rids; $queue->add_subqueue = array(0 => $queue->title); $queue->link = 'Add to '. $queue->title; $queue->link_remove = 'Remove from '. $queue->title; $queue->show_in_links = TRUE; $queue->show_in_tab = TRUE; $queue->show_in_ui = TRUE; $queue->i18n = TRUE; $queue->reference = 0; $queue->owner = 'nodequeue'; $queue->new = TRUE; $qid = nodequeue_save($queue); $this->assertTrue(is_numeric($qid), t('Nodequeue was created and assigned a qid.'), t('Nodequeue')); return $queue; } /** * @param int $qid * The QID of the queue to populate. * @param int $count * The number of nodes to create. Deafult is 10. * @return array * An array of node IDs */ function populateNodequeue($qid, $count = 10) { $nodes = array(); for ($i = 0; $i < $count; $i++) { $node = $this->drupalCreateNode(array('type' => 'story', 'promote' => 1)); $nodes[$node->nid] = $node; } $queue = nodequeue_load($qid); $this->assertTrue($queue->subqueues == 1, t('Nodequeue has no subqueues.'), t('Nodequeue')); $subqueues = nodequeue_load_subqueues_by_queue($queue->qid); $this->assertTrue(count($subqueues) == 1, t('Loaded one subqueue.'), t('Nodequeue')); $subqueue = array_shift($subqueues); foreach ($nodes as $node) { nodequeue_subqueue_add($queue, &$subqueue, $node->nid); } $this->assertTrue($subqueue->count == $count, t('Subqueue contains %count nodes.', array('%count' => $count)), t('Nodequeue')); return array_keys($nodes); } } class NodequeueManipulateTestCase extends NodequeueWebTestCase { public static function getInfo() { return array( 'name' => t('Nodequeue user'), 'description' => t('Manipulate a nodequeue.'), 'group' => t('Nodequeue'), ); } function setUp() { parent::setUp('nodequeue'); $user = $this->drupalCreateUser(array('manipulate queues')); $this->drupalLogin($user); } function testNodequeueInterface() { // create and populate a nodequeue $queue = $this->createNodequeue(array('page', 'story'), array(2), 6); $nodes = $this->populateNodequeue($queue->qid, 4); // is the "remove from nodequeue" link present on the front page? $this->drupalGet('node'); $this->assertText('Remove from '. $queue->title, t('Found nodequeue link on front page.'), t('Nodequeue')); // do we have access to the nodequeue tab on a node page? $this->drupalGet('node/'. $nodes[0]); $this->assertRaw('nodequeue">Nodequeue', t('Found nodequeue tab on node page.'), t('Nodequeue')); $this->assertText('Remove from '. $queue->title, t('Found nodequeue link on node page.'), t('Nodequeue')); // is the table present on the nodequeue tab? $this->drupalGet('node/'. $nodes[0] .'/nodequeue'); $this->assertText($queue->title, t('Found nodequeue in table on nodequeue tab.'), t('Nodequeue')); $this->assertRaw('"nodequeue-max-nodes">'. $queue->size, t('Nodequeue table reports correct queue size.'), t('Nodequeue')); $this->assertRaw('"nodequeue-in-queue">'. count($nodes), t('Nodequeue table reports correct number of elements in queue.'), t('Nodequeue')); $this->assertText('Remove from queue', t('"Remove from queue" link is present.'), t('Nodequeue')); } function testNodequeueAddNode() { // create and populate a nodequeue $queue = $this->createNodequeue(array('page', 'story'), array(2), 6); $nodes = $this->populateNodequeue($queue->qid, 4); // create a new node and add it to the queue using the 'add to queue' link // in the table on the nodequeue tab. $node = $this->drupalCreateNode(array('type' => 'story')); $this->drupalGet('node/'. $node->nid .'/nodequeue'); $this->assertText('Add to queue', t('"Add to queue" link is present.'), t('Nodequeue')); $this->clickLink('Add to queue'); $this->assertRaw('"nodequeue-in-queue">'. (count($nodes) + 1), t('Nodequeue table reports correct number of elements in queue.'), t('Nodequeue')); $this->assertText('Remove from queue', t('"Remove from queue" link is present.'), t('Nodequeue')); // fill up the queue $node = $this->drupalCreateNode(array('type' => 'story')); $this->drupalGet('node/'. $node->nid .'/nodequeue'); $this->assertText('Add to queue', t('"Add to queue" link is present.'), t('Nodequeue')); $this->clickLink('Add to queue'); $this->assertRaw('"nodequeue-in-queue">Queue full', t('Nodequeue table reports the queue as full.'), t('Nodequeue')); } function testNodequeueRemoveNode() { // create and populate a nodequeue $queue = $this->createNodequeue(array('page', 'story'), array(2), 1); $nodes = $this->populateNodequeue($queue->qid, 1); // remove a node by clicking the "Remove" link $this->drupalGet('node/'. $nodes[0] .'/nodequeue'); $this->assertRaw('"nodequeue-in-queue">Queue full', t('Nodequeue table reports the queue as full.'), t('Nodequeue')); $this->clickLink('Remove from queue'); $this->assertText('Queue empty', t('Nodequeue table reports the queue as empty.'), t('Nodequeue')); $this->assertText('Add to queue', t('"Add to queue" link is present.'), t('Nodequeue')); } function testNodequeueAccess() { // create two nodequeues; one the user can access and one she can't access. $queue1 = $this->createNodequeue(array('page', 'story'), array(2)); $queue2 = $this->createNodequeue(array('page', 'story'), array()); $node = $this->drupalCreateNode(array('type' => 'story', 'promote' => 1)); // create a new queue that this user doesn't have access to. $this->drupalGet('node'); $this->assertNoText('Add to '. $queue2->title, t('Nodequeue link is not present on front page.'), t('Nodequeue')); // delete the first queue and make sure the nodequeue tab doesn't show up // (since the user doesn't have access to the remaining queue). nodequeue_delete($queue1->qid); $this->drupalGet('node/'. $node->nid); $this->assertNoRaw('nodequeue">Nodequeue', t('Nodequeue tab is not present on node page.'), t('Nodequeue')); } } class NodequeueManipulateAllTestCase extends NodequeueWebTestCase { public static function getInfo() { return array( 'name' => t('Nodequeue privileged user'), 'description' => t('Manipulate all nodequeues.'), 'group' => t('Nodequeue'), ); } function setUp() { parent::setUp('nodequeue'); $user = $this->drupalCreateUser(array('manipulate queues', 'manipulate all queues')); $this->drupalLogin($user); } function testNodequeueAccess() { // create and populate a nodequeue not associated with any roles. $queue1 = $this->createNodequeue(array('page', 'story'), array()); $node = $this->drupalCreateNode(array('type' => 'story', 'promote' => 1)); // user should still have access to add nodes to the queue $this->drupalGet('node'); $this->assertText('Add to '. $queue1->title, t('Nodequeue link present on front page.'), t('Nodequeue')); // do we have access to the nodequeue tab on a node page? $this->drupalGet('node/'. $node->nid); $this->assertRaw('nodequeue">Nodequeue', t('Nodequeue tab is present on node page.'), t('Nodequeue')); } function testNodequeueAddNode() { // create two nodequeues; one associated with no roles and one associated // with the authenticated user role. $queue1 = $this->createNodequeue(array('page', 'story'), array()); $queue2 = $this->createNodequeue(array('page', 'story'), array(2)); $node = $this->drupalCreateNode(array('type' => 'story', 'promote' => 1)); // add the node to both queues. $this->drupalGet('node/'. $node->nid .'/nodequeue'); $this->clickLink('Add to queue', 0); $this->assertRaw('"nodequeue-count-1" class="nodequeue-in-queue">1', t('Nodequeue table reports correct number of elements in queue.'), t('Nodequeue')); $this->assertText('Remove from queue', t('"Remove from queue" link is present.'), t('Nodequeue')); $this->clickLink('Add to queue', 0); // since the first link has changed $this->assertRaw('"nodequeue-count-2" class="nodequeue-in-queue">1', t('Nodequeue table reports correct number of elements in queue.'), t('Nodequeue')); } } class NodequeueAdministerTestCase extends NodequeueWebTestCase { public static function getInfo() { return array( 'name' => t('Nodequeue administrator'), 'description' => t('Administer nodequeues.'), 'group' => t('Nodequeue'), ); } function setUp() { parent::setUp('nodequeue'); $user = $this->drupalCreateUser(array('administer nodequeue')); $this->drupalLogin($user); } } //class NodequeueAPIUnitTest extends NodequeueWebTestCase { // public static function getInfo() { // return array( // 'name' => t('Nodequeue API'), // 'description' => t('Create and populate nodequeues using the API.'), // 'group' => t('Nodequeue'), // ); // } // // function setUp() { // parent::setUp('nodequeue'); // // // Create and login user // $admin_user = $this->drupalCreateUser(array('administer nodequeue')); // $this->drupalLogin($admin_user); // } // // // nodequeue_queue_access($queue, $subqueue = NULL, $account = NULL) // // nodequeue_load_queues_by_type($type, $location = NULL, $account = NULL, $bypass_cache = FALSE) // // nodequeue_node_and_queue_access($node, $queue, $subqueue = NULL) // // nodequeue_node_tab_access($node) // // nodequeue_node_access($type, $location = NULL, $account = NULL) // // nodequeue_filter_qids(&$qids, $location) // // nodequeue_get_qids($type, $account = NULL, $bypass_cache = FALSE) // // nodequeue_get_all_qids($page_size = 25, $pager_element = 0, $bypass_cache = FALSE) // // nodequeue_load_queues($qids = array(), $bypass_cache = FALSE) // // nodequeue_load($qid) // // subqueue_load($sqid) // // nodequeue_load_subqueues($sqids, $bypass_cache = FALSE) // // nodequeue_load_subqueue($sqid, $bypass_cache = FALSE) // // nodequeue_load_subqueues_by_queue($qids, $page_size = 0) // // nodequeue_load_subqueues_by_reference($references, $bypass_cache = FALSE) // // nodequeue_save(&$queue) - tested in createNodequeue // // nodequeue_delete($qid) - tested in NodequeueManipulateTestCase // // nodequeue_add_subqueue(&$queue, $title, $reference = NULL) // // nodequeue_subqueue_update_title($sqid, $title) // // nodequeue_remove_subqueue($sqid) // // // nodequeue_subqueue_add($queue, &$subqueue, $nid) // // nodequeue_subqueue_remove_node($sqid, $nid) // // nodequeue_subqueue_remove($sqid, $start, $end = NULL) // // nodequeue_queue_clear($sqid) // // nodequeue_check_subqueue_size($queue, &$subqueue, $size = NULL) // // nodequeue_check_subqueue_sizes($queue) // // nodequeue_queue_swap($subqueue, $pos1, $pos2) // // nodequeue_queue_up($subqueue, $position) // // nodequeue_queue_down($subqueue, $position) // // nodequeue_queue_front($subqueue, $position) // // nodequeue_queue_back($subqueue, $position) // // nodequeue_get_subqueue_position($sqid, $nid) // // nodequeue_set_subqueue_positions(&$subqueues, $nid) // // nodequeue_get_subqueues_by_node($queues, $node) // // nodequeue_subqueue_size_text($max, $count, $long = TRUE) // // nodequeue_title_substitute($text, $queue, $subqueue) // // nodequeue_subqueue_shuffle($subqueue) //} // //class NodequeueAdministerTestCase extends NodequeueWebTestCase { // // public static function getInfo() { // return array( // 'name' => t('Nodequeue administrator functionality'), // 'description' => t('Create and populate nodequeues using the interface.'), // 'group' => t('Nodequeue'), // ); // } // // function setUp() { // parent::setUp('nodequeue'); // // $user = $this->drupalCreateUser(array('administer nodequeue')); // $this->drupalLogin($user); // } // //} // //