You are here

public function UltimateCronQueueTest::testOverriddenProcessing in Ultimate Cron 8.2

Tests behavior when ultimate_cron overrides the cron processing.

File

tests/src/Kernel/UltimateCronQueueTest.php, line 106

Class

UltimateCronQueueTest
Update feeds on cron.

Namespace

Drupal\Tests\ultimate_cron\Kernel

Code

public function testOverriddenProcessing() {
  $job = CronJob::load(CronJobInterface::QUEUE_ID_PREFIX . 'cron_queue_test_broken_queue');
  $this
    ->assertNull($job);
  $this
    ->config('ultimate_cron.settings')
    ->set('queue.enabled', TRUE)
    ->save();
  \Drupal::service('ultimate_cron.discovery')
    ->discoverCronJobs();
  $job = CronJob::load(CronJobInterface::QUEUE_ID_PREFIX . 'cron_queue_test_broken_queue');
  $this
    ->assertTrue($job instanceof CronJobInterface);

  /** @var \Drupal\Core\Queue\QueueInterface $queue */
  $queue = $this->container
    ->get('queue')
    ->get('cron_queue_test_broken_queue');

  // Enqueue several item for processing.
  $queue
    ->createItem('process');
  $queue
    ->createItem('process');
  $queue
    ->createItem('process');
  $this
    ->assertEquals(3, $queue
    ->numberOfItems());

  // Run the job, this should process them.
  $job
    ->run(t('Test launch'));
  $this
    ->assertEquals(0, $queue
    ->numberOfItems());

  // Check item delay feature.
  $this
    ->config('ultimate_cron.settings')
    ->set('queue.delays.item_delay', 0.5)
    ->save();
  $queue
    ->createItem('process');
  $queue
    ->createItem('process');
  $queue
    ->createItem('process');
  $this
    ->assertEquals(3, $queue
    ->numberOfItems());

  // There are 3 items, the implementation doesn't wait for the first, that
  // means this should between 1 and 1.5 seconds.
  $before = microtime(TRUE);
  $job
    ->run(t('Test launch'));
  $after = microtime(TRUE);
  $this
    ->assertEquals(0, $queue
    ->numberOfItems());
  $this
    ->assertTrue($after - $before > 1);
  $this
    ->assertTrue($after - $after < 1.5);

  // @todo Test empty delay, causes a wait of 60 seconds with the test queue
  //   worker.
}