You are here

public function GenericCacheBackendUnitTestBase::testSetMultiple in Drupal 10

Same name and namespace in other branches
  1. 8 core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php \Drupal\KernelTests\Core\Cache\GenericCacheBackendUnitTestBase::testSetMultiple()
  2. 9 core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php \Drupal\KernelTests\Core\Cache\GenericCacheBackendUnitTestBase::testSetMultiple()

Tests \Drupal\Core\Cache\CacheBackendInterface::setMultiple().

File

core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php, line 384

Class

GenericCacheBackendUnitTestBase
Tests any cache backend.

Namespace

Drupal\KernelTests\Core\Cache

Code

public function testSetMultiple() {
  $backend = $this
    ->getCacheBackend();
  $future_expiration = REQUEST_TIME + 100;

  // Set multiple testing keys.
  $backend
    ->set('cid_1', 'Some other value');
  $items = [
    'cid_1' => [
      'data' => 1,
    ],
    'cid_2' => [
      'data' => 2,
    ],
    'cid_3' => [
      'data' => [
        1,
        2,
      ],
    ],
    'cid_4' => [
      'data' => 1,
      'expire' => $future_expiration,
    ],
    'cid_5' => [
      'data' => 1,
      'tags' => [
        'test:a',
        'test:b',
      ],
    ],
  ];
  $backend
    ->setMultiple($items);
  $cids = array_keys($items);
  $cached = $backend
    ->getMultiple($cids);
  $this
    ->assertEquals($items['cid_1']['data'], $cached['cid_1']->data, 'Over-written cache item set correctly.');
  $this
    ->assertTrue($cached['cid_1']->valid, 'Item is marked as valid.');
  $this
    ->assertGreaterThanOrEqual(REQUEST_TIME, $cached['cid_1']->created);
  $this
    ->assertLessThanOrEqual(round(microtime(TRUE), 3), $cached['cid_1']->created);
  $this
    ->assertEquals(CacheBackendInterface::CACHE_PERMANENT, $cached['cid_1']->expire, 'Cache expiration defaults to permanent.');
  $this
    ->assertEquals($items['cid_2']['data'], $cached['cid_2']->data, 'New cache item set correctly.');
  $this
    ->assertEquals(CacheBackendInterface::CACHE_PERMANENT, $cached['cid_2']->expire, 'Cache expiration defaults to permanent.');
  $this
    ->assertEquals($items['cid_3']['data'], $cached['cid_3']->data, 'New cache item with serialized data set correctly.');
  $this
    ->assertEquals(CacheBackendInterface::CACHE_PERMANENT, $cached['cid_3']->expire, 'Cache expiration defaults to permanent.');
  $this
    ->assertEquals($items['cid_4']['data'], $cached['cid_4']->data, 'New cache item set correctly.');
  $this
    ->assertEquals($future_expiration, $cached['cid_4']->expire, 'Cache expiration has been correctly set.');
  $this
    ->assertEquals($items['cid_5']['data'], $cached['cid_5']->data, 'New cache item set correctly.');

  // Calling ::setMultiple() with invalid cache tags. This should fail an
  // assertion.
  try {
    $items = [
      'exception_test_1' => [
        'data' => 1,
        'tags' => [],
      ],
      'exception_test_2' => [
        'data' => 2,
        'tags' => [
          'valid',
        ],
      ],
      'exception_test_3' => [
        'data' => 3,
        'tags' => [
          'node' => [
            3,
            5,
            7,
          ],
        ],
      ],
    ];
    $backend
      ->setMultiple($items);
    $this
      ->fail('::setMultiple() was called with invalid cache tags, but runtime assertion did not fail.');
  } catch (\AssertionError $e) {

    // Do nothing; continue testing in extending classes.
  }
}