You are here

public function PluginTestBase::testPaging in Purge 8.3

Test the paging behavior.

File

tests/src/Kernel/Queue/PluginTestBase.php, line 192

Class

PluginTestBase
Provides a abstract test class to aid thorough tests for queue plugins.

Namespace

Drupal\Tests\purge\Kernel\Queue

Code

public function testPaging() : void {
  $this
    ->assertEquals(0, $this->queue
    ->numberOfItems());

  // Assert that setting the paging limit, gets reflected properly.
  $this
    ->assertEquals($this->queue
    ->selectPageLimit(), 15);
  $this
    ->assertEquals($this->queue
    ->selectPageLimit(37), 37);
  $this
    ->assertEquals($this->queue
    ->selectPageLimit(), 37);
  $this
    ->assertEquals($this->queue
    ->selectPageLimit(7), 7);
  $this
    ->assertEquals($this->queue
    ->selectPageLimit(), 7);

  // Assert that an empty queue, results in no pages at all.
  $this
    ->assertEquals($this->queue
    ->selectPageMax(), 0);
  $this
    ->assertEquals($this->queue
    ->selectPage(), []);

  // Create 25 items, which should be 3,5 (so 4) pages of 7 items each.
  $this
    ->assertSame(count($this->queue
    ->createItemMultiple([
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    10,
    11,
    12,
    13,
    14,
    15,
    16,
    17,
    18,
    19,
    20,
    21,
    22,
    23,
    24,
    25,
  ])), 25);
  $this
    ->assertEquals($this->queue
    ->selectPageMax(), 4);
  $this
    ->assertEquals($this->queue
    ->selectPageLimit(5), 5);
  $this
    ->assertEquals($this->queue
    ->selectPageMax(), 5);
  $this
    ->assertEquals($this->queue
    ->selectPageLimit(7), 7);

  // Test the data in the first page, omit the page parameter which is 1.
  $page_1 = $this->queue
    ->selectPage();
  $this
    ->assertEquals(count($page_1), 7);
  $this
    ->assertEquals($page_1[0]->item_id, 1);
  $this
    ->assertEquals($page_1[1]->item_id, 2);
  $this
    ->assertEquals($page_1[2]->item_id, 3);
  $this
    ->assertEquals($page_1[3]->item_id, 4);
  $this
    ->assertEquals($page_1[4]->item_id, 5);
  $this
    ->assertEquals($page_1[5]->item_id, 6);
  $this
    ->assertEquals($page_1[6]->item_id, 7);
  $this
    ->assertEquals($page_1[0]->data, 1);
  $this
    ->assertEquals($page_1[1]->data, 2);
  $this
    ->assertEquals($page_1[2]->data, 3);
  $this
    ->assertEquals($page_1[3]->data, 4);
  $this
    ->assertEquals($page_1[4]->data, 5);
  $this
    ->assertEquals($page_1[5]->data, 6);
  $this
    ->assertEquals($page_1[6]->data, 7);
  $this
    ->assertEquals($page_1[0]->expire, 0);
  $this
    ->assertEquals($page_1[1]->expire, 0);
  $this
    ->assertEquals($page_1[2]->expire, 0);
  $this
    ->assertEquals($page_1[3]->expire, 0);
  $this
    ->assertEquals($page_1[4]->expire, 0);
  $this
    ->assertEquals($page_1[5]->expire, 0);
  $this
    ->assertEquals($page_1[6]->expire, 0);

  // Test the second page, which should be 7 items.
  $page_2 = $this->queue
    ->selectPage(2);
  $this
    ->assertEquals(count($page_2), 7);
  $this
    ->assertEquals($page_2[0]->data, 8);
  $this
    ->assertEquals($page_2[1]->data, 9);
  $this
    ->assertEquals($page_2[2]->data, 10);
  $this
    ->assertEquals($page_2[3]->data, 11);
  $this
    ->assertEquals($page_2[4]->data, 12);
  $this
    ->assertEquals($page_2[5]->data, 13);
  $this
    ->assertEquals($page_2[6]->data, 14);

  // Test the third page, which should be 7 items as well.
  $page_3 = $this->queue
    ->selectPage(3);
  $this
    ->assertEquals(count($page_3), 7);
  $this
    ->assertEquals($page_3[0]->data, 15);
  $this
    ->assertEquals($page_3[1]->data, 16);
  $this
    ->assertEquals($page_3[2]->data, 17);
  $this
    ->assertEquals($page_3[3]->data, 18);
  $this
    ->assertEquals($page_3[4]->data, 19);
  $this
    ->assertEquals($page_3[5]->data, 20);
  $this
    ->assertEquals($page_3[6]->data, 21);

  // The last page, should only be 4 items in total.
  $page_4 = $this->queue
    ->selectPage(4);
  $this
    ->assertEquals(count($page_4), 4);
  $this
    ->assertEquals($page_4[0]->data, 22);
  $this
    ->assertEquals($page_4[1]->data, 23);
  $this
    ->assertEquals($page_4[2]->data, 24);
  $this
    ->assertEquals($page_4[3]->data, 25);

  // And obviously, there should be no fifth page.
  $this
    ->assertEquals($this->queue
    ->selectPage(5), []);
  $this->queue
    ->deleteQueue();
}