PageCachePolicyTrait.php

Same filename and directory in other branches
  1. 11.x core/tests/Drupal/Tests/Traits/Core/Cache/PageCachePolicyTrait.php

Namespace

Drupal\Tests\Traits\Core\Cache

File

core/tests/Drupal/Tests/Traits/Core/Cache/PageCachePolicyTrait.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\Traits\Core\Cache;

use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\PageCache\DefaultRequestPolicy as PageCacheDefaultRequestPolicy;
use Drupal\Core\PageCache\RequestPolicy\NoSessionOpen;
use Drupal\Core\Session\SessionConfigurationInterface;
use Drupal\dynamic_page_cache\PageCache\RequestPolicy\DefaultRequestPolicy as DynamicPageCacheDefaultRequestPolicy;

/**
 * Trait for using page caching modules in Kernel tests.
 *
 * To use Drupal's page caching with HTTP requests in a Kernel test, the
 * following are necessary:
 * - Either or both of the 'page_cache' and 'dynamic_page_cache' modules must be
 *   installed, as desired.
 * - The test class must implement
 *   \Drupal\Core\DependencyInjection\ServiceModifierInterface. This trait
 *   provides an implementation of the alter() method which replaces the cache
 *   policies of the page cache modules.
 * - The 'user' module must be installed if 'dynamic_page_cache' is installed.
 *
 * @see \Drupal\Tests\HttpKernelUiHelperTrait
 */
trait PageCachePolicyTrait {
  
  /**
   * Sets up mock cache policies.
   *
   * To use this, the test class must implement
   * \Drupal\Core\DependencyInjection\ServiceModifierInterface.
   *
   * @param \Drupal\Core\DependencyInjection\ContainerBuilder $container
   *   The DI container.
   */
  public function alter(ContainerBuilder $container) : void {
    if ($container->hasDefinition('page_cache_request_policy')) {
      $service_definition = $container->getDefinition('page_cache_request_policy');
      $service_definition->setClass(KernelTestPageCacheRequestPolicy::class);
    }
    if ($container->hasDefinition('dynamic_page_cache_request_policy')) {
      $service_definition = $container->getDefinition('dynamic_page_cache_request_policy');
      $service_definition->setClass(KernelTestDynamicPageCacheRequestPolicy::class);
    }
  }

}

/**
 * Replaces the page_cache module's default request policy.
 */
class KernelTestPageCacheRequestPolicy extends PageCacheDefaultRequestPolicy {
  public function __construct(SessionConfigurationInterface $session_configuration) {
    $this->addPolicy(new NoSessionOpen($session_configuration));
  }

}

/**
 * Replaces the dynamic_page_cache module's default request policy.
 */
class KernelTestDynamicPageCacheRequestPolicy extends DynamicPageCacheDefaultRequestPolicy {
  public function __construct() {
  }

}

Classes

Title Deprecated Summary
KernelTestDynamicPageCacheRequestPolicy Replaces the dynamic_page_cache module's default request policy.
KernelTestPageCacheRequestPolicy Replaces the page_cache module's default request policy.

Traits

Title Deprecated Summary
PageCachePolicyTrait Trait for using page caching modules in Kernel tests.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.