CacheableMetadataCalculationTest.php

Same filename in this branch
  1. 11.x core/modules/views/tests/src/Kernel/CacheableMetadataCalculationTest.php
Same filename and directory in other branches
  1. 9 core/modules/views/tests/src/Kernel/CacheableMetadataCalculationTest.php
  2. 9 core/modules/views/tests/modules/views_test_cacheable_metadata_calculation/src/Plugin/views/access/CacheableMetadataCalculationTest.php
  3. 8.9.x core/modules/views/tests/src/Kernel/CacheableMetadataCalculationTest.php
  4. 8.9.x core/modules/views/tests/modules/views_test_cacheable_metadata_calculation/src/Plugin/views/access/CacheableMetadataCalculationTest.php
  5. 10 core/modules/views/tests/src/Kernel/CacheableMetadataCalculationTest.php
  6. 10 core/modules/views/tests/modules/views_test_cacheable_metadata_calculation/src/Plugin/views/access/CacheableMetadataCalculationTest.php

Namespace

Drupal\views_test_cacheable_metadata_calculation\Plugin\views\access

File

core/modules/views/tests/modules/views_test_cacheable_metadata_calculation/src/Plugin/views/access/CacheableMetadataCalculationTest.php

View source
<?php

namespace Drupal\views_test_cacheable_metadata_calculation\Plugin\views\access;

use Drupal\Core\Cache\Cache;
use Drupal\Core\Cache\CacheableDependencyInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\State\StateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Attribute\ViewsAccess;
use Drupal\views\Plugin\views\access\AccessPluginBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Routing\Route;

/**
 * Tests plugin that reports when cacheable metadata is being calculated.
 */
class CacheableMetadataCalculationTest extends AccessPluginBase implements CacheableDependencyInterface {
    
    /**
     * The state service.
     *
     * @var \Drupal\Core\State\StateInterface
     */
    protected $state;
    
    /**
     * Constructs a CacheableMetadataCalculationTest access plugin.
     *
     * @param array $configuration
     *   A configuration array containing information about the plugin instance.
     * @param string $plugin_id
     *   The plugin_id for the plugin instance.
     * @param mixed $plugin_definition
     *   The plugin implementation definition.
     * @param \Drupal\Core\State\StateInterface $state
     *   The state service.
     */
    public function __construct(array $configuration, $plugin_id, $plugin_definition, StateInterface $state) {
        parent::__construct($configuration, $plugin_id, $plugin_definition);
        $this->state = $state;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
        return new static($configuration, $plugin_id, $plugin_definition, $container->get('state'));
    }
    
    /**
     * {@inheritdoc}
     */
    public function access(AccountInterface $account) {
        return TRUE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function alterRouteDefinition(Route $route) {
    }
    
    /**
     * {@inheritdoc}
     */
    public function getCacheContexts() {
        $this->cacheableMetadataHasBeenAccessed();
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public function getCacheTags() {
        $this->cacheableMetadataHasBeenAccessed();
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public function getCacheMaxAge() {
        $this->cacheableMetadataHasBeenAccessed();
        return Cache::PERMANENT;
    }
    
    /**
     * Sets a flag to inform tests that cacheable metadata has been accessed.
     */
    protected function cacheableMetadataHasBeenAccessed() {
        $this->state
            ->set('views_test_cacheable_metadata_has_been_accessed', TRUE);
    }

}

Classes

Title Deprecated Summary
CacheableMetadataCalculationTest Tests plugin that reports when cacheable metadata is being calculated.

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