You are here

public function CronExampleTest::testCronExampleBasic in Examples for Developers 8

Same name and namespace in other branches
  1. 3.x modules/cron_example/tests/src/Functional/CronExampleTest.php \Drupal\Tests\cron_example\Functional\CronExampleTest::testCronExampleBasic()

Create an example node, test block through admin and user interfaces.

File

cron_example/tests/src/Functional/CronExampleTest.php, line 43

Class

CronExampleTest
Test the functionality for the Cron Example.

Namespace

Drupal\Tests\cron_example\Functional

Code

public function testCronExampleBasic() {
  $assert = $this
    ->assertSession();
  $cron_form = Url::fromRoute('cron_example.description');

  // Pretend that cron has never been run (even though simpletest seems to
  // run it once...).
  $this->container
    ->get('state')
    ->set('cron_example.next_execution', 0);
  $this
    ->drupalGet($cron_form);

  // Initial run should cause cron_example_cron() to fire.
  $post = [];
  $this
    ->drupalPostForm($cron_form, $post, 'Run cron now');
  $assert
    ->pageTextContains('cron_example executed at');

  // Forcing should also cause cron_example_cron() to fire.
  $post['cron_reset'] = TRUE;
  $this
    ->drupalPostForm(NULL, $post, 'Run cron now');
  $assert
    ->pageTextContains('cron_example executed at');

  // But if followed immediately and not forced, it should not fire.
  $post['cron_reset'] = FALSE;
  $this
    ->drupalPostForm(NULL, $post, 'Run cron now');
  $assert
    ->statusCodeEquals(200);
  $assert
    ->pageTextNotContains('cron_example executed at');
  $assert
    ->pageTextContains('There are currently 0 items in queue 1 and 0 items in queue 2');
  $post = [
    'num_items' => 5,
    'queue' => 'cron_example_queue_1',
  ];
  $this
    ->drupalPostForm(NULL, $post, 'Add jobs to queue');
  $assert
    ->pageTextContains('There are currently 5 items in queue 1 and 0 items in queue 2');
  $post = [
    'num_items' => 100,
    'queue' => 'cron_example_queue_2',
  ];
  $this
    ->drupalPostForm(NULL, $post, 'Add jobs to queue');
  $assert
    ->pageTextContains('There are currently 5 items in queue 1 and 100 items in queue 2');
  $this
    ->drupalPostForm($cron_form, [], 'Run cron now');
  $assert
    ->responseMatches('/Queue 1 worker processed item with sequence 5 /');
  $assert
    ->responseMatches('/Queue 2 worker processed item with sequence 100 /');
}