public function QueueTest::testQueue in Message Subscribe 8
Test base queue processing logic.
File
- tests/src/ Kernel/ QueueTest.php, line 63 
Class
- QueueTest
- Test queue integration.
Namespace
Drupal\Tests\message_subscribe\KernelCode
public function testQueue() {
  $node = $this->node;
  $message = Message::create([
    'template' => 'foo',
  ]);
  $subscribe_options = [];
  $subscribe_options['save message'] = FALSE;
  try {
    $this->messageSubscribers
      ->sendMessage($node, $message, [], $subscribe_options);
    $this
      ->fail('Can add a non-saved message to the queue.');
  } catch (MessageSubscribeException $e) {
    $this
      ->assertTrue(TRUE, 'Cannot add a non-saved message to the queue.');
  }
  // Assert message was saved and added to queue.
  $uids = array_fill(1, 10, new DeliveryCandidate([], [], 1));
  foreach ($uids as $uid => $candidate) {
    $candidate
      ->setAccountId($uid);
  }
  $subscribe_options = [
    'uids' => $uids,
    'skip context' => TRUE,
    'range' => 3,
  ];
  $queue = \Drupal::queue('message_subscribe');
  $this
    ->assertEquals($queue
    ->numberOfItems(), 0, 'Queue is empty');
  $this->messageSubscribers
    ->sendMessage($node, $message, [], $subscribe_options);
  $this
    ->assertTrue((bool) $message
    ->id(), 'Message was saved');
  $this
    ->assertEquals($queue
    ->numberOfItems(), 1, 'Message added to queue.');
  // Assert queue-item is processed and updated. We mock subscription
  // of users to the message. It will not be sent, as the default
  // notifier is disabled.
  $item = $queue
    ->claimItem();
  $item_id = $item->item_id;
  // Add the queue information, and the user IDs to process.
  $subscribe_options['queue'] = [
    'uids' => $uids,
    'item' => $item,
    'end time' => FALSE,
  ];
  $this->messageSubscribers
    ->sendMessage($node, $message, [], $subscribe_options);
  // Reclaim the new item, and assert the "last UID" was updated.
  $item = $queue
    ->claimItem();
  $this
    ->assertNotEquals($item_id, $item->item_id, 'Queue item was updated.');
  $this
    ->assertEquals($item->data['subscribe_options']['last uid'], 3, 'Last processed user ID was updated.');
}