You are here

queue_example.test in Examples for Developers 7

Test the queue example module.

File

queue_example/queue_example.test
View source
<?php

/**
 * @file
 * Test the queue example module.
 */

/**
 * Functional tests for the Queue Example module.
 *
 * @ingroup queue_example
 */
class QueueExampleTestCase extends DrupalWebTestCase {

  /**
   * {@inheritdoc}
   */
  public static function getInfo() {
    return array(
      'name' => 'Queue Example functionality',
      'description' => 'Test Queue Example functionality',
      'group' => 'Examples',
    );
  }

  /**
   * Enable modules and create user with specific permissions.
   */
  public function setUp() {
    parent::setUp('queue_example');
  }

  /**
   * Test the queue behavior through user interaction.
   */
  public function testQueueExampleBasic() {

    // Load the queue with 5 items.
    for ($i = 1; $i <= 5; $i++) {
      $edit = array(
        'queue_name' => 'queue_example_first_queue',
        'string_to_add' => "boogie{$i}",
      );
      $this
        ->drupalPost('queue_example/insert_remove', $edit, t('Insert into queue'));
      $this
        ->assertText(t('There are now @number items in the queue', array(
        '@number' => $i,
      )));
    }

    // Claim each of the 5 items with a claim time of 0 seconds.
    for ($i = 1; $i <= 5; $i++) {
      $edit = array(
        'queue_name' => 'queue_example_first_queue',
        'claim_time' => 0,
      );
      $this
        ->drupalPost(NULL, $edit, t('Claim the next item from the queue'));
      $this
        ->assertPattern(t('%Claimed item id=.*string=@string for 0 seconds.%', array(
        '@string' => "boogie{$i}",
      )));
    }
    $edit = array(
      'queue_name' => 'queue_example_first_queue',
      'claim_time' => 0,
    );
    $this
      ->drupalPost(NULL, $edit, t('Claim the next item from the queue'));
    $this
      ->assertText(t('There were no items in the queue available to claim'));

    // Sleep a second so we can make sure that the timeouts actually time out.
    // Local systems work fine with this but apparently the PIFR server is so
    // fast that it needs a sleep before the cron run.
    sleep(1);

    // Run cron to release expired items.
    $this
      ->drupalPost(NULL, array(), t('Run cron manually to expire claims'));
    $queue_items = queue_example_retrieve_queue('queue_example_first_queue');

    // Claim and delete each of the 5 items which should now be available.
    for ($i = 1; $i <= 5; $i++) {
      $edit = array(
        'queue_name' => 'queue_example_first_queue',
        'claim_time' => 0,
      );
      $this
        ->drupalPost(NULL, $edit, t('Claim the next item and delete it'));
      $this
        ->assertPattern(t('%Claimed and deleted item id=.*string=@string for 0 seconds.%', array(
        '@string' => "boogie{$i}",
      )));
    }

    // Verify that nothing is left to claim.
    $edit = array(
      'queue_name' => 'queue_example_first_queue',
      'claim_time' => 0,
    );
    $this
      ->drupalPost(NULL, $edit, t('Claim the next item from the queue'));
    $this
      ->assertText(t('There were no items in the queue available to claim'));
  }

}

Classes

Namesort descending Description
QueueExampleTestCase Functional tests for the Queue Example module.